我有两个形状不同的数据帧(df1,df2),但我想对df1应用条件If语句并将值从df2拖入df1。 Df1将有重复的行,但是我需要用df2中的相同值填充它们,否则请保持原样。
df1:
Code 1 Name
2 Sam
5 James
7 Mark
6 Steven
-9 Michael
-9 Sarah
-9 Sam
5 James
-9 Mark
6 Steven
7 Michael
-9 Sarah
-9 Chris
df2:
Code 1 Name
20 Sam
30 James
40 Mark
50 Steven
70 Michael
45 Sarah
df1预期输出:
Code 1 Name
2 Sam
5 James
7 Mark
6 Steven
70 Michael
45 Sarah
20 Sam
5 James
40 Mark
6 Steven
7 Michael
45 Sarah
-9 Chris
答案 0 :(得分:2)
我们可以用np.where
来map
df1['Code1']=np.where(df1['Code1'].eq(-9),df1['Name'].map(dict(zip(df2['Name'],df2['Code1']))),df1['Code1'])
答案 1 :(得分:2)
使用Series.map
+ DataFrame.loc
:
where=df1['Code1'].eq(-9)&df1['Name'].isin(df2['Name'].tolist())
df1.loc[where,'Code1']=df1.loc[where,'Name'].map(df2.set_index('Name')['Code1'])
print(df1)
Code1 Name
0 2 Sam
1 5 James
2 7 Mark
3 6 Steven
4 70 Michael
5 45 Sarah
6 20 Sam
7 5 James
8 40 Mark
9 6 Steven
10 7 Michael
11 45 Sarah
12 -9 Chris
我们也可以使用Series.where
:
df1['Code1']=df1['Name'].map(df2.set_index('Name')['Code1']).where(where,df1['Code1'])