举个例子,假设我们有两个 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')
默认为'inner'。
inner:使用来自两个帧的键的交集,类似于 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