为Pandas中groupby size结果列设置自定义列名
问题描述
我有一个DataFrame,需要统计指定列的唯一项数量。在示例中,希望将groupby后size()生成的列命名为"NUM_CIK",请问为groupby结果列指定名称的最优方法是什么?
当前代码:
cik_groupby_cusip_occur = cik_groupby_cusip_occur.groupby( ['CUSIP'], sort=True)['CIK COMPANY'].size().sort_values(ascending=False)
示例输出:
CUSIP 594918104 4560 037833100 4457 023135106 4053 02079K305 3545 478160104 3472
期望输出:
CUSIP NUM_CIK 594918104 4560 037833100 4457 023135106 4053 02079K305 3545 478160104 3472
解决方案
以下是几种高效的实现方式,可根据需求选择:
1. 使用reset_index()直接指定列名
适合需要将分组键(CUSIP)转为普通列的场景:
cik_groupby_cusip_occur = cik_groupby_cusip_occur.groupby( ['CUSIP'], sort=True)['CIK COMPANY'].size().reset_index(name='NUM_CIK').sort_values(by='NUM_CIK', ascending=False)
reset_index(name='NUM_CIK')一步完成两个操作:把CUSIP从索引转为普通列,同时将size()生成的计数列命名为NUM_CIK,最后按计数结果降序排序。
2. 使用agg()方法指定聚合列名
扩展性最强,适合后续需要添加更多聚合操作的场景:
cik_groupby_cusip_occur = cik_groupby_cusip_occur.groupby( ['CUSIP'], sort=True)['CIK COMPANY'].agg(NUM_CIK='size').sort_values(by='NUM_CIK', ascending=False)
agg(NUM_CIK='size')直接将size聚合的结果映射到指定列名,代码简洁且易扩展——如果之后需要同时统计最大值、平均值,只需在agg()中添加对应字段,比如agg(NUM_CIK='size', MAX_CIK='max')。
3. 使用rename()修改Series名称
适合需要保留分组键(CUSIP)作为索引的场景:
cik_groupby_cusip_occur = cik_groupby_cusip_occur.groupby( ['CUSIP'], sort=True)['CIK COMPANY'].size().rename('NUM_CIK').sort_values(ascending=False)
rename('NUM_CIK')直接修改size()生成的Series的名称,此时CUSIP仍作为索引,输出格式与期望一致。
内容的提问来源于stack exchange,提问作者C_Turbo
相关产品推荐
相关产品推荐

