如何只替换数据框中的某些SOME列值,使其从另一个条件中取出?

时间:2019-05-21 14:32:24

标签: python pandas

我在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]然后用字典中的值替换。

但是我不知道如何用熊猫

2 个答案:

答案 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