通过公共列值将一个数据帧列值赋值给另一个值
问题描述:
假设我有两个数据帧,如下所示的df1,df2。 DF1:通过公共列值将一个数据帧列值赋值给另一个值
A B C
0 4 40 300
1 2 70 900
2 5 80 900
和另一数据帧DF2:
A D E
0 1 0 00
1 2 0 00
2 3 0 00
3 4 0 00
4 5 0 00
5 6 0 00
现在我要分配柱DF1 [ 'C']的值,以DF2 [ 'E']由A列匹配的条件。结果应该是
A D E
0 1 0 00
1 2 0 900
2 3 0 00
3 4 0 300
4 5 0 900
5 6 0 00
我该怎么做?
注:我正在寻找更新df2而不是合并,因为我必须在循环中多次执行此操作。
答
可以使用合并功能。
df2 =pd.merge(df2,df1,on='A',how='left')
df2 = df2.fillna(value='00')
df2 = df2[['A','D','C']].rename(columns={'C': 'E'})
print(df2)
A D E
0 1 0 00
1 2 0 900
2 3 0 00
3 4 0 300
4 5 0 900
5 6 0 00
答
您可以使用pd.merge()
pd.merge(df2[['A','D']],df1[['A']].assign(E=df1.C),on='A',how='left').fillna('00')
Out[269]:
A D E
0 1 0 00
1 2 0 900
2 3 0 00
3 4 0 300
4 5 0 900
5 6 0 00
或者你可以使用df.update()
df2_new = df2.set_index('A')
df2_new.update(df1.assign(E=df1.C).set_index('A'))
df2_new.reset_index()
Out[254]:
A D E
0 1 0 00
1 2 0 900
2 3 0 00
3 4 0 300
4 5 0 900
5 6 0 00