如何在Pandas中以左连接方式对两个DataFrame执行减法运算?
解决Pandas DataFrame左连接式减法问题
要实现只保留左DataFrame行的减法,有两种简单直接的方法:
方法一:先对齐右DataFrame的索引到左表
先把df2的索引重定向到df1的索引(不存在的索引默认填充NaN,也可以指定fill_value设为0),再直接做减法:
import pandas as pd # 示例数据 df1 = pd.DataFrame({'value': [10, 20, 30]}, index=['circle', 'triangle', 'rectangle']) df2 = pd.DataFrame({'value': [5, 15]}, index=['circle', 'square']) # 对齐索引后减法,保留df1的所有行 # 若希望df2无匹配的行,减法结果等于df1原值,就添加fill_value=0 result = df1 - df2.reindex(df1.index, fill_value=0)
运行后result的索引和df1完全一致,不会出现square这类仅存在于df2的行。
方法二:先做外连接减法,再筛选左表索引
先用sub完成默认外连接的减法,再通过loc筛选出df1的索引:
result = df1.sub(df2, fill_value=0).loc[df1.index]
这种方法逻辑直观,先完成所有可能的减法运算,再只保留你需要的左表行。
注意点
- 如果不设置
fill_value=0,df2中无匹配的索引位置会显示NaN,减法后对应位置也会变成NaN,可根据实际需求选择是否填充。 - Pandas的算术运算默认采用外连接(取索引并集),确实没有
how='left'这类参数,因此需要手动做索引对齐或事后筛选来实现左连接式的减法。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

