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

如何快捷实现DataFrame按Level分组的差异化聚合:指定列用nunique(),其余年份列用mean()

高效实现DataFrame分组聚合的方案

嘿,这个需求太常见了——手动列几十列简直是噩梦!给你两个实用的方法,不用一个个敲列名:

方法一:按列名规律筛选年份列

如果你的2021年及以后的列名是类似2021、2022这种统一格式,直接用列表推导式提取这些列,再加上需要nunique的列构建聚合字典:

import pandas as pd

# 假设你的DataFrame名为df,需要nunique的两列是'ColumnX'和'ColumnY'
# 筛选2021及以后的年份列(这里假设列名以'202'开头,可根据实际调整规则)
year_columns = [col for col in df.columns if col.startswith('202')]

# 构建聚合规则:年份列用mean,指定列用nunique
aggregation_rules = {col: 'mean' for col in year_columns}
aggregation_rules.update({'ColumnX': 'nunique', 'ColumnY': 'nunique'})

# 执行分组聚合
grouped_result = df.groupby('Level').agg(aggregation_rules)

方法二:排除指定列来获取剩余列

如果年份列的命名没那么规整,或者你想直接排除不需要mean的列(也就是分组字段和需要nunique的列),可以用columns.difference()来自动获取剩余列:

# 定义不需要用mean的列:分组字段Level + 需要nunique的两列
exclude_cols = ['Level', 'ColumnX', 'ColumnY']
# 获取所有需要用mean的列
mean_columns = df.columns.difference(exclude_cols)

# 构建聚合规则
aggregation_rules = {col: 'mean' for col in mean_columns}
aggregation_rules.update({'ColumnX': 'nunique', 'ColumnY': 'nunique'})

# 分组聚合
grouped_result = df.groupby('Level').agg(aggregation_rules)

这两种方法都能帮你省去手动列60多列的麻烦,根据你的列名实际情况选就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:33:11