我有3个dfs,我不知道如何合并。
DF1:
ID Name XCount
111 aaa 3
222 bbb 2
333 ccc 3
DF2:
ID Name YCount
111 abc 3
222 bbb 2
444 ddd 1
DF3:
ID Name YCount
111 aaa 2
222 bbb 3
555 eee 4
目标:
ID Name XCount YCount Zcount
111 aaa 3 NA 2
111 abc NA 3 NA
222 bbb 2 2 3
333 ccc 2 NA NA
444 ddd NA 1 NA
555 eee NA NA 4
我尝试连接,但ID和名称字段不匹配。
感谢!!!
答案 0 :(得分:3)
您需要使用合并
df1.merge(df2, on = ['ID', 'Name'],how = 'outer').merge(df3, on = ['ID', 'Name'], how = 'outer')
ID Name XCount YCount_x YCount_y
0 111 aaa 3.0 NaN 2.0
1 222 bbb 2.0 2.0 3.0
2 333 ccc 3.0 NaN NaN
3 111 abc NaN 3.0 NaN
4 444 ddd NaN 1.0 NaN
5 555 eee NaN NaN 4
答案 1 :(得分:1)
你可以使用concat和groupby:df = pd.concat(pd.DataFrame(i) for i in (data1,data2,data3)).groupby(['ID','Name']).sum().reset_index()
来完成。完整示例如下:
康卡特会把事情放在彼此之上。
import pandas as pd
data1 = {'ID': {0: 111, 1: 222, 2: 333},
'Name': {0: 'aaa', 1: 'bbb', 2: 'ccc'},
'XCount': {0: 3, 1: 2, 2: 3}}
data2 = {'ID': {0: 111, 1: 222, 2: 444},
'Name': {0: 'abc', 1: 'bbb', 2: 'ddd'},
'YCount': {0: 3, 1: 2, 2: 1}}
data3 = {'ID': {0: 111, 1: 222, 2: 555},
'Name': {0: 'aaa', 1: 'bbb', 2: 'eee'},
'ZCount': {0: 2, 1: 3, 2: 4}}
df = pd.concat(pd.DataFrame(i) for i in (data1,data2,data3))
print(df)返回:
ID Name XCount YCount ZCount
0 111 aaa 3.0 NaN NaN
1 222 bbb 2.0 NaN NaN
2 333 ccc 3.0 NaN NaN
0 111 abc NaN 3.0 NaN
1 222 bbb NaN 2.0 NaN
2 444 ddd NaN 1.0 NaN
0 111 aaa NaN NaN 2.0
1 222 bbb NaN NaN 3.0
2 555 eee NaN NaN 4.0
如果我们现在执行groupby:
df.groupby(['ID','Name']).sum().reset_index()
我们得到:
ID Name XCount YCount ZCount
0 111 aaa 3.0 NaN 2.0
1 111 abc NaN 3.0 NaN
2 222 bbb 2.0 2.0 3.0
3 333 ccc 3.0 NaN NaN
4 444 ddd NaN 1.0 NaN
5 555 eee NaN NaN 4.0