如何优化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
相关产品推荐
相关产品推荐

