如何加入/合并数据集?
Posted
技术标签:
【中文标题】如何加入/合并数据集?【英文标题】:How to Join / Merge datasets? 【发布时间】:2017-09-17 13:08:50 【问题描述】:我有两个数据框 DF1
和 DF2
。我的目标是使用DF1
列查找DF2
钥匙;并将返回结果作为结果保存在DF3
中。有人可以帮我得到
DF3
?
例如
DF1 DF2
map test1 test2 No. outcome
A NaN NaN 1 AA
B NaN 5 2 BB
C 1 6 3 CC
D 2 7 4 DD
E 3 NaN 5 EE
F 4 NaN 6 FF
G 5 8 7 GG
H 6 9 8 HH
I 7 10 9 II
10 JJ
11 KK
12 LL
13 MM
DF3
map test1 test2 outcome1 outcome2
A NaN NaN NaN NaN
B NaN 5 NaN EE
C 1 6 AA FF
D 2 7 BB GG
E 3 NaN CC NaN
F 4 NaN DD NaN
G 5 8 EE HH
H 6 9 FF II
I 7 10 GG JJ
我目前正在使用两个连接函数,但这不是我需要的。它在DF1
中删除NaN
s,并且只返回test1
和test2
的重叠部分。
df3 = df1.merge(df2, how='inner', left_on='test1', right_on='No.')
df3 = df3.merge(df2, how='inner', left_on='test2', right_on='No.')
目前我的代码会返回这个:
DF3 映射测试1 测试2 结果1 结果2 C 1 6 AA FF D 2 7 BB GG G 5 8 EE HH H 6 9 FF II I 7 10 GG JJ
【问题讨论】:
i.stack.imgur.com/h2RoV.png 什么是“数据集”(因为它不是任何内置 Python 数据类型的名称)? 抱歉给您带来了困惑。我的意思是熊猫数据框 使用两条语句来实现这个有什么问题? 数据框也不是内置的。我已经相应地更新了您问题的标签。 【参考方案1】:在这种情况下地图会更有效
DF3 = DF1.copy()
DF3['outcome1'] = DF1['test1'].map(DF2.set_index('No.')['outcome'])
DF3['outcome2'] = DF1['test2'].map(DF2.set_index('No.')['outcome'])
map test1 test2 outcome1 outcome2
0 A NaN NaN NaN NaN
1 B NaN 5.0 NaN EE
2 C 1.0 6.0 AA FF
3 D 2.0 7.0 BB GG
4 E 3.0 NaN CC NaN
5 F 4.0 NaN DD NaN
6 G 5.0 8.0 EE HH
7 H 6.0 9.0 FF II
8 I 7.0 10.0 GG JJ
【讨论】:
【参考方案2】:你喜欢代码高尔夫吗?
pd.merge(pd.merge(df1, df2, how='left',left_on='test1',right_on='No.'),df2, how='left',left_on='test2',right_on='No.').drop(['No._x','No._y'], axis=1).rename(columns='outcome_x':'outcome1','outcome_y':'outcome2')
map test1 test2 outcome1 outcome2
0 A NaN NaN NaN NaN
1 B NaN 5.0 NaN EE
2 C 1.0 6.0 AA FF
3 D 2.0 7.0 BB GG
4 E 3.0 NaN CC NaN
5 F 4.0 NaN DD NaN
6 G 5.0 8.0 EE HH
7 H 6.0 9.0 FF II
8 I 7.0 10.0 GG JJ
【讨论】:
苏卡,这太棒了。所以本质上,我使用 how = 'inner' 进行合并,但应该使用 how = 'left'。以上是关于如何加入/合并数据集?的主要内容,如果未能解决你的问题,请参考以下文章