Pandas DataFrame根据匹配的condition列对value列执行减法操作
实现方法
你可以通过左连接合并或者字典映射两种方式实现需求,以下是可直接运行的代码:
1. 构造测试数据
import pandas as pd df = pd.DataFrame({'condition': [1, 2, 3], 'value': [1, 2, 3]}) df_0 = pd.DataFrame({'condition': [1, 2], 'value': [1, 3]})
2. 方法1:左连接合并计算(逻辑直观易理解)
先按condition字段将两个DataFrame左连接,用df作为基准保留所有行,未匹配到的df_0数值填充为0后做差值计算:
# 重命名df_0的value列避免合并时字段冲突 merged = df.merge(df_0.rename(columns={'value': 'value_ref'}), on='condition', how='left') # 计算差值,未匹配到的参考值填充为0 merged['value'] = merged['value'] - merged['value_ref'].fillna(0) # 提取目标字段得到结果 df_desired_result = merged[['condition', 'value']] # 若需要value列为整数类型可加这行 # df_desired_result['value'] = df_desired_result['value'].astype(int)
3. 方法2:映射字典计算(代码更简洁)
将df_0的condition和value转为映射字典,直接对df的行做匹配计算:
ref_map = df_0.set_index('condition')['value'].to_dict() df['value'] = df.apply(lambda x: x['value'] - ref_map.get(x['condition'], 0), axis=1) df_desired_result = df
两种方法运行后均可得到你需要的结果:
condition value 0 1 0 1 2 -1 2 3 3
内容的提问来源于stack exchange,提问作者Lucy
相关产品推荐
相关产品推荐

