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

如何在DataFrame中统计每行pine树种总数量并生成新变量?

解决方案:统计每行中Pine树种的总数量

没问题,我来帮你搞定这个需求!你的DataFrame里每一组pX列对应spX列的树种数量,我们需要把每行里所有标记为pine的树种对应的数量加起来,生成新的pine列。

步骤1:明确数据结构

先把你的原始DataFrame整理成更清晰的表格格式:

Joinp1sp1p2sp2p3sp3
1000000
21pine001Aspen
32pine0000

步骤2:实现统计逻辑

这里提供两种实用方法,你可以根据场景选择:

方法一:矢量化操作(推荐,大数据处理更高效)

利用pandas的矢量化特性,避免逐行循环,速度更快:

import pandas as pd

# 假设你的DataFrame已创建,名为sp
# 定义对应的数量列和树种列
p_cols = ['p1', 'p2', 'p3']
sp_cols = ['sp1', 'sp2', 'sp3']

# 生成布尔矩阵,标记哪些位置的树种是pine
pine_mask = sp[sp_cols] == 'pine'

# 把布尔值转成对应数量(True取对应p列的值,False取0),再每行求和
sp['pine'] = pine_mask.multiply(sp[p_cols]).sum(axis=1)

方法二:apply逐行处理

列数不多时,这种方式更直观易懂:

# 定义列对
p_cols = ['p1', 'p2', 'p3']
sp_cols = ['sp1', 'sp2', 'sp3']

# 对每行遍历列对,累加pine对应的数量
sp['pine'] = sp.apply(
    lambda row: sum(row[p_col] for p_col, sp_col in zip(p_cols, sp_cols) if row[sp_col] == 'pine'),
    axis=1
)

步骤3:查看最终结果

处理后你的DataFrame会新增pine列,结果如下:

Joinp1sp1p2sp2p3sp3pine
10000000
21pine001Aspen1
32pine00002

补充提示

如果后续有更多pX/spX列(比如p4/sp4),只需要扩展p_cols和sp_cols的列表即可,代码不需要大改动~

内容的提问来源于stack exchange,提问作者Mostarin Binte Ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:55:14