如何在pandas中复制数据框1中的行数,以匹配数据框2中的n行。

我几个月前刚开始学习Python,也是刚开始使用StackOverflow,请耐心等待。我们有两个数据帧。

df1:

    0.1,0.2,0.3,0.4  
    1.0,2.0,3.0,4.0
    6.0,7.0,8.0,9.0 

df2:

    Sequence, dataset_ID  
    1,1  
    2,4  
    10,5

我用python的iterrows函数把df1转置成:

for ind,row in df1.iterrows():
    row.to_csv(path+'\df1Transposed')

df1Transposed:

    0.1,1.0
    0.2,2.0  
    0.3,3.0  
    0.4,4.0
    0.1,6.0
    0.2,7.0  
    0.3,8.0  
    0.4,9.0

我试图找到一个好的方法来分组复制df2中的每一行,以匹配df1转置的行数。例如,在df1中的1个转置头和行在df1Transposed中创建了4行和2列(0.1-0.4),并为df1中的下一行再次重复。所以df2中的第一行应该重复4次,然后第二行应该再重复4次。

dfout。

Sequence, dataset_ID,V,I
1,1,0.1,1.0
1,1,0.2,2.0  
1,1,0.3,3.0  
1,1,0.4,4.0  
2,4,0.1,6.0  
2,4,0.2,7.0  
2,4,0.3,8.0  
2,4,0.4,9.0  

解决方案:

你可以使用numpy的组合函数 repeatarange 来获取索引,然后将两个数据帧水平连接起来。

首先,得到转置,感谢@sammywemmy方便的一语中的。

df1_T = pd.concat([df1.iloc[:2].T,
                   df1.iloc[::2].T.set_axis([0,1],axis=1)],ignore_index=True)

第二,得到转置数据帧的长度,从df2中选择你想包含的行数,然后使用上面提到的函数。

df_1_l = df1_T.shape[0]
no_rows_from_df2 = 2
index = np.repeat(np.arange(no_rows_from_df2), df_1_l//rows_df2)

df3 = pd.concat([df1_T.reset_index(drop=True),
             df2.iloc[index].reset_index(drop=True)], axis=1)
df3

#     0 1   Sequence  dataset_ID
# 0 0.1 1.0   1       1
# 1 0.2 2.0   1       1
# 2 0.3 3.0   1       1
# 3 0.4 4.0   1       1
# 4 0.1 6.0   2       4
# 5 0.2 7.0   2       4
# 6 0.3 8.0   2       4
# 7 0.4 9.0   2       4

有一点,这样做的原因是df1_T的长度是df2中所选行数的倍数 如果你想重复行数的话 0,1,2 那么 df1 应是 3, 6, 9, 12 ...

给TA打赏
共{{data.count}}人
人已打赏
未分类

无法使用gitbash创建文件或目录。

2022-9-8 15:46:20

未分类

组装弹簧回流slf4j记录仪。

2022-9-8 15:46:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索