2017-06-18 55 views
0

假设我有两个数据帧,如下所示的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而不是合并,因为我必须在循环中多次执行此操作。

回答

0

可以使用合并功能。

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 
0

您可以使用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 
相关问题