基于列值连接多个CSV文件,但多个CSV文件具有相同的标题,但顺序不同

2024-10-17 00:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在清理一些数据。我有来自多个试验的多个试验对象的数据

SubNo Trails Score 
1       1      4
1       2      4
1       3      8
7       1      9
7       2      8
7       3      8
19
:
:

对于同一主题,我有另一个数据集,用于SubNo的不同顺序

SubNo Trails Height 
19      1      100
19      2      400
19      3      810
7       1      911
7       2      811
7       3      811
20      1      222
20      2      222
20      3      789
1
1
:
:

我想在SubNo上加入这两个,这样最终我每个主题的得分和身高都有一个CSV

SubNo Trails Score Height 
1        1     4     198
1        2     4     209
1        3     8     289
2        1     :      :
2        2
2        3

在这里,我基于subNo将相同的数据合并在一起:因此,将1的所有值合并在一起,将subject 2的所有值合并在一起,依此类推。在我的两个csv文件中,subject的顺序不同。 所以,我不想基于标题加入,而是基于特定的主题号。在我的例子中,就是1,2,17,…像这样。 我该怎么做呢?(我尝试了熊猫合并,它是基于标题的)。这不会满足我的要求


Tags: 文件csv数据对象标题主题顺序例子
3条回答

您的问题有点不清楚,但据我所知,您正试图获得一个csv文件,其中包含SubNo、Trails、Score和Height列(SubNo列是关键)

在这种情况下,您应该执行以下操作:

new_dataframe = left_dataframe.join(right_dataframe.set_index('SubNo'), on='SubNo', how='left')

或者:

new_dataframe = pd.merge(left_dataframe, right_dataframe, on='SubNo', how='left')

请查看pandasmerge函数。您将有效地在SubNoTrials上进行合并。一个小的代码片段是:

df1.merge(df2, how='inner')

在此步骤之后,您可能可以使用groupby()函数(可在pandas文档中找到)按主题进行切片,根据子编号对行进行分组,然后将每个组保存为单独的CSV

使用merge

print (pd.merge(df1, df2, on=['SubNo','Trails'],  how='left'))

SubNo  Trails  Score  Height
1       1      4      100
1       2      4      200
7       1      9      300

相关问题 更多 >