我有两个数据帧DF1
和DF2
。我的目标是使用DF2
列查找DF1
键;并将结果保存为DF3
中的结果。有人可以帮助我获得
DF3
?
e.g。
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
我目前正在使用两个连接函数,但这不是我需要的。它会在NaN
中删除DF1
,并仅返回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
map test1 test2 outcome1 outcome2
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
答案 0 :(得分:1)
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
答案 1 :(得分: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