我在pandas(python)中有两个DataFrames
df1
UniqueKey ValueFix ValueChange
A 10 100
B 15 0
C 20 150
D 15 0
E 10 100
df2
UniqueKey ValueFix ValueChange
B 15 300
D 15 400
我想基于df2 BUT中的值更新df1 仅更新“值更改”列中的值。因为实际上我不应更新不在df2中的行。我该如何实现?我迷路了。 所以我理想的结果是:
UniqueKey ValueFix ValueChange
A 10 100
B 15 300
C 20 150
D 15 400
E 10 100
在我唯一的解决方案中,我展示了如何使用UniqueKey-ValuChange将df2转换为字典 然后with循环通过df1中的ValueChange,条件是“如果字典中的row [Value_change]然后用字典中的值替换。
但是我不知道如何用熊猫
答案 0 :(得分:0)
似乎应该这样做:
idx = df1.index.intersection(df2.index)
df1.loc[idx , 'ValueChange'] = df2[idx, 'ValueChange']
输出:
ValueFix ValueChange
UniqueKey
A 10 100
B 15 300
C 20 150
D 15 400
E 10 100
答案 1 :(得分:0)
您可以使用numpy where
通过以下方式更新您的列:
import pandas as pd
import numpy as np
df1 = pd.DataFrame({'UniqueKey': ['A', 'B','C','D','E'], 'ValueFix': [10,15,20,15,10], 'ValueChange': [100,0,150,0,100]})
df2 = pd.DataFrame({'UniqueKey': ['B', 'D'], 'ValueFix': [15,15], 'ValueChange': [300,400]})
merged_df = df1.merge(df2, on='UniqueKey', how='left')
df1.ValueChange = np.where(df1.UniqueKey.isin(df2.UniqueKey), merged_df.ValueChange_y, merged_df.ValueChange_x)
输出为
print(df1)
UniqueKey ValueFix ValueChange
0 A 10 100.0
1 B 15 300.0
2 C 20 150.0
3 D 15 400.0
4 E 10 100.0