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

如何优化Pandas中groupby转DataFrame及重命名的冗余代码?

Pandas代码优化问题

我是Pandas新手,还请包涵。目前我执行如下代码:

import pandas as pd

example = pd.DataFrame({
    'Date': ['2019-06-17', '2019-08-10', '2019-08-15', '2020-08-12'],
    'Column_1': ['Car', 'Car', 'Truck', 'Truck'],
    'Column_2': ['Red', 'Yellow', 'Yellow', 'Yellow']
})

data = example.groupby([pd.Grouper(freq='Y', key='Date'),'Column_1']).nunique()
df1=pd.DataFrame(data)
df2 = df1.reset_index(level=['Column_1','Date'])
df2 = df2.rename(columns={'Date':'interval_year','Column_2':'Sum'})

期望得到如下结果:

index  interval_year   Column_1   Sum
1      2019-12-31      Car        2
2      2019-12-31      Truck      1
3      2020-12-31      Truck      1

虽然能得到预期结果,但代码创建了2个额外的DataFrame,有时遇到索引与列同名的情况会更复杂,请问如何让这段代码更高效?


优化方案

可以通过链式调用简化代码,无需创建中间DataFrame,同时优化聚合逻辑提升效率:

import pandas as pd

# 先确保Date列为datetime类型(若原始数据为字符串格式)
example['Date'] = pd.to_datetime(example['Date'])

# 链式完成所有操作
df2 = (example
       .groupby([pd.Grouper(freq='Y', key='Date'), 'Column_1'])
       ['Column_2']  # 仅对需要统计的列执行聚合,减少计算量
       .nunique()
       .reset_index(name='Sum')  # 一步重置索引并指定聚合列的新名称
       .rename(columns={'Date': 'interval_year'})
       )

关键优化点:

  • 链式调用:将分组、聚合、索引重置、列重命名操作串联,避免生成data、df1等中间变量,代码更简洁且减少内存占用
  • 精准聚合:明确指定对Column_2执行nunique,避免默认对所有列执行聚合操作,提升运行效率
  • 简化索引与重命名:使用reset_index(name='Sum')替代先重置索引再单独重命名的步骤,减少代码行数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:40:35