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

如何在Pandas中对多州数据应用where函数计算占比?

问题:Pandas计算各州数据占比时仅单个州有结果,其余为NaN

你的代码仅针对California计算了占比,其他州因不满足filter1,where返回NaN,导致最终占比列显示为NaN。以下是两种解决方法,推荐使用第一种更简洁高效的方案:

方法一:使用groupby+transform(推荐)

通过按state分组,自动计算每个州的总和并匹配到对应行,一次性完成所有州的占比计算:

df['percentage'] = df['total'] / df.groupby('state')['total'].transform('sum')

原理说明

  • groupby('state'):将数据按州名分组
  • transform('sum'):计算每组(每个州)的total总和,并将该值广播到组内的每一行
  • 最终每行的total除以对应州的总和,得到该数据在所属州的占比

方法二:使用np.select多条件匹配

如果坚持用条件过滤的方式,可以用numpy.select为不同州分配对应的计算逻辑:

import numpy as np

filter1 = df['state'] == 'California'
filter2 = df['state'] == 'Texas'
filter3 = df['state'] == 'Florida'

# 定义每个州对应的占比计算规则
conditions = [filter1, filter2, filter3]
values = [
    df['total'] / df[filter1]['total'].sum(),
    df['total'] / df[filter2]['total'].sum(),
    df['total'] / df[filter3]['total'].sum()
]

df['percentage'] = np.select(conditions, values, default=np.nan)

注意事项

这种方式适合州数量较少的场景,若后续新增州需手动添加条件,扩展性不如groupby方案。

预期输出示例

处理后所有州的占比列都会得到对应值:

Year    state         total    percentage
2014    California  914198.0    0.134925
2014    Florida     766441.0    0.465712
2014    Texas      1045274.0    0.512345
2015    California  874642.0    0.129087
2015    Florida     878760.0    0.534288

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 07:01:00