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

如何按年份统计各变量对应含非空值的唯一State数量

问题需求

针对DataFrame中的每个变量(Var1、Var2),统计每年内存在至少一个非空值的唯一State数量,并按指定格式输出结果。

原始DataFrame

YearStateVar1Var2
2018113
201812NaN
20181NaN1
20182NaN1
20182NaN2
201833NaN
201911NaN
201913NaN
201912NaN
20191NaNNaN
20192NaNNaN
201923NaN
202011NaN
20202NaN1
20202NaN3
202033NaN
20204NaNNaN
202041NaN

期望输出

Year     2018     2019     2020
 Var1   Num of States w/ non-null     2        2        3
 Var2   Num of States w/ non-null     2        0        1

解决方案

通过Pandas的分组、聚合和格式调整可以实现需求:

import pandas as pd

# 假设原始数据已加载为df
# 1. 按年份和州分组,判断每个变量是否存在非空值
grouped = df.groupby(['Year', 'State']).agg(
    Var1_has_non_null=('Var1', lambda x: x.notna().any()),
    Var2_has_non_null=('Var2', lambda x: x.notna().any())
).reset_index()

# 2. 按年份聚合,统计有非空值的州数量
result = grouped.groupby('Year').agg(
    Var1=('Var1_has_non_null', 'sum'),
    Var2=('Var2_has_non_null', 'sum')
).T

# 3. 调整索引格式匹配期望输出
result.index = pd.MultiIndex.from_tuples(
    [(idx, 'Num of States w/ non-null') for idx in result.index],
    names=['', 'Year']
)
result.columns.name = None

# 输出结果
print(result.to_string())

代码说明

  • 分组判断非空:按Year和State分组,用x.notna().any()判断该州在对应年份下是否有至少一个非空值,返回布尔值。
  • 聚合统计数量:按Year分组对布尔值求和(True记为1,False记为0),得到每个年份下有非空值的州数量。
  • 格式调整:转置结果后设置多级索引,匹配期望的输出样式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:15:45