Pandas(Python) - 从条件更新另一个数据框的列

时间:2016-11-29 10:37:54

标签: python pandas machine-learning

我遇到了问题而且我找到了一个解决方案,但我觉得这样做是错误的。 也许,有一种更“规范”的做法。

问题

我有两个数据框,我想合并而没有额外的列,也没有删除现有的信息。示例:

现有数据框(df)

   A  A2  B
0  1   4  0
1  2   5  1

要合并的数据框(df2)

   A  A2  B
0  1   4  2
1  3   5  2

如果列'A'和'A2'对应,我想用df更新df2。 结果将是(:

   A  A2    B
0  1   4  2.0 <= Update value ONLY
1  2   5  1.0

这是我的解决方案,但我认为这不是一个非常好的解决方案。

import pandas as pd

df = pd.DataFrame([[1,4,0],[2,5,1]],columns=['A','A2','B'])

df2 = pd.DataFrame([[1,4,2],[3,5,2]],columns=['A','A2','B'])

df = df.merge(df2,on=['A', 'A2'],how='left')
df['B_y'].fillna(0, inplace=True)
df['B'] = df['B_x']+df['B_y']
df = df.drop(['B_x','B_y'], axis=1)
print(df)

有没有人有更好的方法? 谢谢!

2 个答案:

答案 0 :(得分:8)

是的,可以在没有合并的情况下完成:

rows = (df[['A','A2']] == df2[['A','A2']]).all(axis=1)
df.loc[rows,'B'] = df2.loc[rows,'B']

答案 1 :(得分:1)

你可以试试这个:

df.ix[df2.loc[(df['A'] == df2['A']) & (df['A2'] ==   
df2['A2']),'B'].index.values,'B'] = \
df2.loc[(df['A'] == df2['A']) & (df['A2'] == df2['A2']),'B']