如何在Pandas DataFrame中排除指定行计算数值列总和?
排除指定行计算DataFrame数值列总和的解决方案
需求说明
计算DataFrame内所有数值列的总和,但排除parameter列值为Production-avg的行,同时保留原数据行,仅修改总计行的数值。
原代码问题
原代码直接对所有数值列求和,未排除指定行,导致总计包含了Production-avg对应的数据:
import pandas as pd # Example DataFrame df = pd.DataFrame({'category': ['Production', 'Production', 'Production', 'Production', 'Production'], 'parameter': ['hello', 'Production-avg', 'Production-etf', 'ktf', 'kfc'], 'actuals': [10, 30, 50, 70, 90], 'bp': [15, 35, 55, 75, 95]}) df.loc['total'] = df.select_dtypes(include=['int64']).sum() print(df)
修改后的代码
先过滤掉parameter列等于Production-avg的行,再对剩余行的数值列求和:
import pandas as pd # Example DataFrame df = pd.DataFrame({'category': ['Production', 'Production', 'Production', 'Production', 'Production'], 'parameter': ['hello', 'Production-avg', 'Production-etf', 'ktf', 'kfc'], 'actuals': [10, 30, 50, 70, 90], 'bp': [15, 35, 55, 75, 95]}) # 排除指定行后计算数值列总和 filtered_df = df[df['parameter'] != 'Production-avg'] df.loc['total'] = filtered_df.select_dtypes(include=['int64']).sum() print(df)
输出结果
执行代码后将得到期望的总计数值:
category parameter actuals bp 0 Production hello 10.0 15.0 1 Production Production-avg 30.0 35.0 2 Production Production-etf 50.0 55.0 3 Production ktf 70.0 75.0 4 Production kfc 90.0 95.0 total NaN NaN 220.0 240.0
补充说明
- 用
df['parameter'] != 'Production-avg'筛选出需要参与求和的行,得到临时的filtered_df - 对筛选后的DataFrame数值列求和,赋值给
total行 - 原数据行完全保留,仅调整总计行数值,精准匹配需求
内容的提问来源于stack exchange,提问作者AbinBenny
相关产品推荐
相关产品推荐

