使用Pandas从透视表统计布尔值及DataFrame分组统计需求
没问题!我来帮你实现这个基于A、B、C列分组统计的需求。咱们一步步来:
1. 先还原你的示例DataFrame
首先我们把你给出的数据转换成可运行的pandas DataFrame:
import pandas as pd data = { 'A': ['a','a','a','a','a','a','s','s','s','s','d','d','d','d','d'], 'B': ['z','z','z','z','z','z','x','x','x','x','c','c','c','c','c'], 'C': ['l','l','l','r','r','r','7','7','7','5','l','l','r','r','r'], 'D': [1,2,3,1,2,2,2,3,4,1,1,2,1,2,3], 'E': ['qqq','qqq','qqq','www','www','www','eee','eee','eee','eee','rrr','rrr','fff','fff','fff'], 'F': [True,True,False,True,False,False,True,False,True,True,True,False,False,True,True] } df = pd.DataFrame(data)
2. 分组聚合统计
用groupby配合agg函数,就能按A、B、C的唯一组合,统计你需要的所有指标:
# 按A、B、C分组,定义聚合规则 result = df.groupby(['A', 'B', 'C']).agg( D总数量=('D', 'size'), # 统计每组D列的元素总数(即组内总行数) D唯一值数量=('D', 'nunique'), # 统计每组D列的唯一值个数 F_True计数=('F', 'sum'), # 布尔值True会被转为1,sum直接得到True的数量 F_False计数=('F', lambda x: len(x) - x.sum()) # 组内总行数减去True的数量,就是False的数量 ).reset_index() # 把分组列从索引转回普通列,更符合表格形式
3. 最终统计结果
运行上面的代码后,你会得到如下结构化的统计表格:
| A | B | C | D总数量 | D唯一值数量 | F_True计数 | F_False计数 | |
|---|---|---|---|---|---|---|---|
| 0 | a | z | l | 3 | 3 | 2 | 1 |
| 1 | a | z | r | 3 | 2 | 1 | 2 |
| 2 | d | c | l | 2 | 2 | 1 | 1 |
| 3 | d | c | r | 3 | 3 | 2 | 1 |
| 4 | s | x | 5 | 1 | 1 | 1 | 0 |
| 5 | s | x | 7 | 3 | 3 | 2 | 1 |
简单解释下关键逻辑:
groupby(['A','B','C']):指定按这三列的唯一组合作为分组依据agg():通过字典自定义每个统计指标的列名和计算规则reset_index():默认分组后分组列会成为索引,用这个方法把它们转回普通列,方便后续使用
内容的提问来源于stack exchange,提问作者Federico Gentile
相关产品推荐
相关产品推荐

