我想将两个具有相同索引号但不同列号的datframe组合在一起:
>>> df1
col_1 col_2 col_3 col_4
0 a x NaN 54
1 a y 5 34
2 b z NaN 64
3 c z 7 23
>>> df2
col_1 col_2 col_3 col_4 col_5
0 a x NaN 14 14
1 b z NaN 9 7
2 c z 7 51 53
3 a y 5 87 66
df2
将基于df1
,col_1
和col_2
的值在col_3
中合并。
但是行的顺序将不同。
我想根据df1
的顺序将它们组合起来
答案将是这样的:
col_1 col_2 col_3 col_4 col_4 col_5
0 a x NaN 54 14 14
1 a y 5 34 87 66
2 b z NaN 64 9 7
3 c z 7 23 51 53
我不在乎列名,因此你们可以根据需要修改它们。
答案 0 :(得分:3)
如果我理解正确,那么您希望不加排序就加入索引:
result = df1.join(df2.drop(columns=['col_1', 'col_2', 'col_3']), lsuffix='x', rsuffix='y', sort=False)
print(result)
输出:
col_1 col_2 col_3 col_4x col_4y col_5
0 a x NaN 54 14 14
1 a y 5 34 9 7
2 b z NaN 64 51 53
3 c z 7 23 87 66
否则,只需对前三列进行简单合并即可,而无需进行排序:
result = df1.merge(df2, on=['col_1', 'col_2', 'col_3'], sort=False)
print(result)
输出:
col_1 col_2 col_3 col_4_x col_4_y col_5
0 a x NaN 54 14 14
1 a y 5 34 87 66
2 b z NaN 64 9 7
3 c z 7 23 51 53
答案 1 :(得分:1)
您可以使用:
df1.merge(df2, how='right', on=['col_1', 'col_2', 'col_3'], sort=False)
col_1 col_2 col_3 col_4_x col_4_y col_5
0 a x NaN 54 14 14
1 a y 5.0 34 87 66
2 b z NaN 64 9 7
3 c z 7.0 23 51 53
答案 2 :(得分:0)
只需使用可用的合并功能
import pandas as pd
df=df1.merge(df2,left_index=True)