如何在条件允许的情况下,从另一个列值中仅替换数据帧中的某些列值?

2024-09-30 22:27:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我在pandas(python)中有两个数据帧

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中的值更新df1,但只更新“值更改”列中的值。因为实际上我不应该更新不在df2中的行。我怎样才能做到这一点?我迷路了。 所以我想要的结果是:

UniqueKey ValueFix ValueChange
A            10      100
B            15      300
C            20      150
D            15      400
E            10      100

在我心目中唯一的解决方案,我显示某种程度上转换df2到字典与UniqueKey值的变化 with循环遍历df1中的ValueChange,条件是“如果dictionary中的行[Value\u change],则替换为dictionary中的值”。你知道吗

但是我不知道怎么处理熊猫


Tags: 数据pandasdictionary字典valuewith解决方案条件
2条回答

可以使用numpy^{}按以下方式更新列:

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

似乎这样就可以了:

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

相关问题 更多 >