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

如何在pandas中基于指定行数据创建小计记录

问题原因

你当前代码输出异常的核心原因是:df.loc[df['animal']=='falcon','num_specimen_seen']返回的是Series对象而非单个数值,多个Series按索引相加时会因为索引不匹配生成NaN值,最终写入单元格的就是整个异常序列而非求和结果。

解决方案

不需要额外创建DataFrame子集,直接用isin()筛选目标动物后调用sum()即可得到求和标量,同时推荐使用pd.concat()替代已在pandas 2.0+版本中被弃用的append()方法,兼容后续版本运行:

import pandas as pd

df = pd.DataFrame({'animal': ['falcon', 'dog', 'spider', 'fish'],
                   'num_specimen_seen': [10, 2, 1, 8]})

# 直接筛选陆生动物求和,仅生成标量结果不创建子集
land_total = df.loc[df['animal'].isin(['falcon', 'dog', 'spider']), 'num_specimen_seen'].sum()

# 新增汇总行
df = pd.concat([
    df, 
    pd.DataFrame([{'animal': 'Total Land', 'num_specimen_seen': land_total}])
], ignore_index=True)

print(df)

如果需要多次执行同类汇总操作,可以封装成工具函数复用:

def add_animal_total(df, total_name, target_animals):
    total_val = df.loc[df['animal'].isin(target_animals), 'num_specimen_seen'].sum()
    return pd.concat([
        df,
        pd.DataFrame([{'animal': total_name, 'num_specimen_seen': total_val}])
    ], ignore_index=True)

# 多次调用示例
df = add_animal_total(df, 'Total Land', ['falcon', 'dog', 'spider'])
df = add_animal_total(df, 'Total Aquatic', ['fish'])

运行后即可得到你需要的预期输出,Total Land对应的num_specimen_seen值为13。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:39:00