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

Pandas中groupby和unstack后如何获取可命名引用的统计列?

解决按周分组后统计列无法通过名称访问的问题

当使用pd.Grouper(freq="W")按周分组并执行unstack后,统计列只能通过iloc访问,无法直接用列名引用,需要将结果转换为包含date和counts列的标准DataFrame。

问题原因

原代码中用dummy列(值为整数1)进行分组,unstack后的列名是整数类型的1,而非字符串'1',所以用result['1']会报错,但result[1]可以访问。不过这种方式冗余,更优的是调整分组逻辑直接生成目标结构。


方案1:修复现有结果的结构

如果要保留原分组逻辑,可通过重命名列来标准化结构:

# 重置索引并将整数列名重命名为counts
result_fixed = result.reset_index().rename(columns={1: 'counts'})
# 现在可直接通过列名访问
print(result_fixed['date'])
print(result_fixed['counts'])

方案2:更简洁的分组实现(推荐)

无需借助dummy列,直接按date列按周分组统计数量,一步生成标准DataFrame:

import pandas as pd
from datetime import datetime
from faker import Faker

fake = Faker()
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 2, 1)

# 生成数据集
df = pd.DataFrame(
    {"date": [fake.date_time_between(start_date=start_date, end_date=end_date) for i in range(30)]}
)

# 确保date列为datetime类型(若原始数据不是的话)
df['date'] = pd.to_datetime(df['date'])

# 按周分组统计数量,直接生成date和counts列的DataFrame
result_clean = df.groupby(pd.Grouper(key='date', freq='W')).size().reset_index(name='counts')
  • pd.Grouper(key='date', freq='W'):指定按date列以周为频率分组
  • size():统计每组的行数(即事件数量)
  • reset_index(name='counts'):将索引转为列,并把统计列命名为counts

生成的result_clean可以直接通过result_clean['counts']或result_clean['date']访问列,完全符合后续数据处理的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:01:01