You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在列数不同的pandas DataFrame中对同名列做减法并保留其他列

解决方法

可以通过以下步骤实现,无需手动指定列名:

  1. 提取同名列:利用列名的交集操作,自动找出两个DataFrame共有的列
  2. 计算同名列差值:对共有的列执行减法运算
  3. 提取独有列:分别获取两个DataFrame中独有的列
  4. 合并结果:将差值结果与所有独有列拼接成新的DataFrame

完整代码示例

import pandas as pd

data1 = {'Brazil': [1, 2], 'Chile': [3, 4], 'Indonesia': [5, 6], 'China': [7, 8]}
data2 = {'Brazil': [0, 1], 'Chile': [2, 3], 'China': [4, 5]}

df1 = pd.DataFrame(data=data1)
df2 = pd.DataFrame(data=data2)

# 获取同名列
common_cols = df1.columns.intersection(df2.columns)
# 计算同名列的差值
diff_result = df1[common_cols] - df2[common_cols]
# 获取df1独有的列
df1_unique = df1[df1.columns.difference(df2.columns)]
# 如果df2有独有列,同样提取(示例中df2无独有列,可根据实际情况保留)
df2_unique = df2[df2.columns.difference(df1.columns)]

# 合并所有部分到新DataFrame
final_df = pd.concat([diff_result, df1_unique, df2_unique], axis=1)

# 可选:恢复原DataFrame中的列顺序(如果需要)
# final_df = final_df[df1.columns.union(df2.columns)]

print(final_df)

运行结果

Brazil  Chile  China  Indonesia
0       1      1      3          5
1       1      1      3          6

说明

  • columns.intersection() 自动筛选出两个DataFrame的共同列,完全避免手动指定列名,适合处理大量列的场景
  • columns.difference() 提取当前DataFrame独有的列,确保不会遗漏任何独有数据
  • pd.concat(axis=1) 按列拼接数据,保证所有需要的列都被整合到结果中
  • 如果需要保持原DataFrame的列顺序,可以取消最后一行注释,用union()获取所有列的完整顺序

内容的提问来源于stack exchange,提问作者danielssl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:20:24