我有两个数据框
第一个数据帧df1
UserMasterId Status Count
0 1296.0 5 5
1 1316.0 5 9
2 1325.0 5 14
3 1332.0 5 5
4 1337.0 5 44
5 1342.0 5 2
6 1344.0 5 18
第二个数据帧df2
UserMasterId Status Count
0 1325.0 0 2
1 1332.0 0 1
2 1337.0 0 1
3 1342.0 0 3
4 1344.0 0 1
在这两个数据框中,我们具有相同的ID。
当我使用 Concat 时,
result = pd.concat([df1, df2], axis=1, sort=True)
result
我得到的输出是
UserMasterId Status Count UserMasterId Status Count
0 1296.0 5 5 1325.0 0.0 2.0
1 1316.0 5 9 1332.0 0.0 1.0
2 1325.0 5 14 1337.0 0.0 1.0
3 1332.0 5 5 1342.0 0.0 3.0
4 1337.0 5 44 1344.0 0.0 1.0
5 1342.0 5 2 NaN NaN NaN
6 1344.0 5 18 NaN NaN NaN
当我使用合并时,
result = pd.merge(df1,df2[['UserMasterId', 'Count','Status']],on='UserMasterId')
result.head()
输出为
UserMasterId Status_x Count_x Count_y Status_y
0 1325.0 5 14 2 0
1 1332.0 5 5 1 0
2 1337.0 5 44 1 0
3 1342.0 5 2 3 0
4 1344.0 5 18 1 0
这将删除df1和df2中不常见的ID。
我不想删除两个数据框都不通用的ID。 我想要这样的输出,
UserMasterId Status_x Count_x Count_y Status_y
0 1296.0 5 5 NA NA
1 1316.0 5 9 NA NA
2 1325.0 5 14 2 0
3 1332.0 5 5 1 0
4 1337.0 5 44 1 0
5 1342.0 5 2 3 0
6 1344.0 5 18 1 0
有人可以帮我吗?
答案 0 :(得分:1)
使用带有外部联接的合并应该很好,对吧?但是我没有测试
result = pd.merge(df1,df2[['UserMasterId', 'Count','Status']],on='UserMasterId', how='outer')
答案 1 :(得分:0)
您可以尝试使用方法append:
df3 = df1.append(df2)
答案 2 :(得分:0)
pd.concat
是这里的解决方案,但是您需要添加ignore_index
参数,而不要将axis
设置为1
,例如:
>>> df1 = pd.DataFrame({'a': [0, 1], 'b': [2, 3]})
>>> df2 = pd.DataFrame({'b': [4, 5], 'a': [5, 6]})
>>> pd.concat([df1, df2], ignore_index=True)
a b
0 0 2
1 1 3
2 5 4
3 6 5
答案 3 :(得分:0)
只需使用how='outer'
result = pd.merge(df1,df2[['UserMasterId', 'Count','Status']],on='UserMasterId', how='outer')
print(result)
UserMasterId Status_x Count_x Count_y Status_y
0 1296.0 5 5 NaN NaN
1 1316.0 5 9 NaN NaN
2 1325.0 5 14 2.0 0.0
3 1332.0 5 5 1.0 0.0
4 1337.0 5 44 1.0 0.0
5 1342.0 5 2 3.0 0.0
6 1344.0 5 18 1.0 0.0