如何从pandas的groupby与agg聚合结果中获取类列数据?
解决pandas聚合后列名与内置方法重名的访问问题
当聚合后的列名是count或size时,这两个名称和DataFrame的内置方法/属性重名,直接用df.count或df.size会触发内置方法而非访问列数据,这里给你3种实用的解决方式:
1. 用方括号索引访问(最直接)
不管列名是否和内置方法冲突,方括号索引都是最稳妥的访问方式:
import pandas as pd # 构造示例数据 df = pd.DataFrame({ 'B': ['x', 'x', 'y', 'y', 'y'], 'C': [1, None, 3, 4, None] }) # 按B分组,对C执行count和size聚合 agg_result = df.groupby('B')['C'].agg(['count', 'size']) # 用方括号访问目标列 count_data = agg_result['count'] size_data = agg_result['size']
2. 聚合时重命名列(从根源避免冲突)
在agg操作时给聚合结果指定自定义别名,彻底避开和内置方法重名的问题:
# 聚合时直接重命名列 agg_result_renamed = df.groupby('B')['C'].agg(c_count='count', c_size='size') # 之后可以直接用属性访问 count_data = agg_result_renamed.c_count size_data = agg_result_renamed.c_size
3. 用loc或iloc定位列
通过位置或标签定位列,也能绕过名称冲突:
# 用loc按列名定位 count_data = agg_result.loc[:, 'count'] # 用iloc按列索引定位(假设count是第2列,索引从0开始) count_data = agg_result.iloc[:, 1]
补充说明
agg_result.count()是DataFrame的内置方法,作用是计算每列的非空值数量,而非访问名为count的列;agg_result.size是DataFrame的内置属性,返回整个DataFrame的元素总个数,所以会和列名冲突。
内容的提问来源于stack exchange,提问作者user2153235
相关产品推荐
相关产品推荐

