如果它们之间满足条件,如何将值从一个数据框复制到另一个数据框?

时间:2019-11-19 22:20:44

标签: python pandas dataframe

我有两个形状不同的数据帧(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

2 个答案:

答案 0 :(得分:2)

我们可以用np.wheremap

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'])