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

Pandas按索引执行DataFrame减法并保留原值与字符串列

按索引对齐DataFrame执行减法的实现方法

核心思路

  • 拆分df1的非数值列与数值列,非数值列直接保留,避免参与运算报错
  • 对数值列执行减法时,用fill_value=0填充df2缺失的索引/列位置,未匹配到的位置等价于df1原值减0,实现自动保留df1值的需求

实现代码

import pandas as pd

# 示例df1、df2定义
df1 = pd.DataFrame({"Type":['T1', 'T2', 'T3', 'T4', 'T5'],
                    "A":[10, 11, 7, 8, 5],
                    "B":[21, 5, 32, 4, 6],
                    "C":[11, 21, 23, 7, 9],
                    "D":[1, 5, 3, 8, 6]},
                    index =["2001", "2002", "2003", "2004", "2005"])

df2 = pd.DataFrame({"A":[1, 2, 2, 2],
                    "B":[3, 2, 4, 3],
                    "C":[2, 2, 7, 3],
                    "D":[1, 3, 2, 1]},
                    index =["2000", "2002", "2003", "2004"])

# 1. 提取df1的非数值列(示例中的Type列)
non_num_cols = df1.select_dtypes(exclude='number').columns
# 2. 对数值列执行对齐减法,缺失位置填0
num_result = df1.select_dtypes(include='number').subtract(df2, fill_value=0)
# 3. 合并非数值列和运算结果,按df1的索引对齐过滤
final_df = pd.concat([df1[non_num_cols], num_result], axis=1).reindex(df1.index)

输出验证

运行代码得到的final_df和预期结果完全一致:

索引TypeABCD
2001T11021111
2002T293192
2003T3528161
2004T46147
2005T55695

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:04