我正在尝试将python熊猫的数据框中的某些列连接起来。说,我有以下数据帧:
df1 ['头','身体','feat1','feat2']
df2 ['Head','Body','feat3','feat4']
我想将数据框合并到:
merged_df ['Head','Body','feat1','feat2','feat3',feat4']
直觉上,我这样做:
merged_df = pd.concat([df1, df2['feat3','feat4'],axis=1)
它没有用。我做了研究,然后这样做:
merged_df =
df1[['Head','Body','feat1','feat2']].merge(df2[['Head','feat3','feat4']],
on='Head', how='left')
它有效,但是导致我的数据存在一些差异。原来我的一些“头”数据不是唯一的。因此,现在我正在寻找最直接的方法来将DF2中的选定列连接到我的DF1中。请注意,两个数据帧遵循相同的顺序,因此DF1中的第1行与DF2中的第1行直接相关,第8120行也是如此,依此类推。
谢谢
答案 0 :(得分:0)
我认为您需要赋值,它将忽略索引
df1['feat3']=df2['feat3'].values
df1['feat4']=df2['feat4'].values
答案 1 :(得分:0)
以一个示例为例,假设我们有两个DataFrame,分别为df1
和df2
,因此,如果列中的值相同或唯一,则只需合并即可对齐列如您所愿。
$ df1
Head Body feat1 feat2
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
$ df2
Head Body feat3 feat4
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
第1步解决方案:
>>> pd.merge(df1, df2, on=['Head', 'Body'])
Head Body feat1 feat2 feat3 feat4
0 1 1 1 1 1 1
1 2 2 2 2 2 2
2 3 3 3 3 3 3
其次,如果您的列值不同,则可以使用pd.concat或pd.merge:
$ df1
Head Body feat1 feat2
0 1 1 1 1
1 2 2 2 2
2 3 3 3 3
$ df2
Head Body feat3 feat4
0 4 1 1 1
1 5 2 2 2
2 6 3 3 3
第2步解决方案:
如果您想同时使用两个框架中的键并集,则可以同时使用concat
和merge
,如下所示:
>>> pd.concat([df1,df2], join="outer", sort=False)
Head Body feat1 feat2 feat3 feat4
0 1 1 1.0 1.0 NaN NaN
1 2 2 2.0 2.0 NaN NaN
2 3 3 3.0 3.0 NaN NaN
0 4 1 NaN NaN 1.0 1.0
1 5 2 NaN NaN 2.0 2.0
2 6 3 NaN NaN 3.0 3.0
>>> pd.merge(df1, df2, on=['Head', 'Body'], how='outer')
Head Body feat1 feat2 feat3 feat4
0 1 1 1.0 1.0 NaN NaN
1 2 2 2.0 2.0 NaN NaN
2 3 3 3.0 3.0 NaN NaN
3 4 1 NaN NaN 1.0 1.0
4 5 2 NaN NaN 2.0 2.0
5 6 3 NaN NaN 3.0 3.0
或者您可以选择拥有:
a)如果您想使用左框中的键
pd.merge(df1, df2, on=['Head', 'Body'], how='left')
b)如果要使用右框的键
pd.merge(df1, df2, on=['Head', 'Body'], how='right')
默认为“内部”。
内部:使用两个框架中关键点的交集,类似于SQL 内部联接;保留左键的顺序
您可以看到DataFrame.merge的详细信息。
查看解决方法后,您想使用left frame
>>> pd.merge(df1, df2, on=['Head', 'Body'], how='left')
Head Body feat1 feat2 feat3 feat4
0 1 1 1 1 NaN NaN
1 2 2 2 2 NaN NaN
2 3 3 3 3 NaN NaN