如何在pandas DataFrame中分组统计次数并计算百分比占比
实现pandas DataFrame新增指定计算列的方法
直接运行以下代码即可得到符合要求的结果:
import pandas as pd # 示例数据初始化 df = pd.DataFrame({ "column A": ["Atlanta", "Atlanta", "New York", "New York","New York"], "column B": ["AT", "AT", "NY", "NY", "AT"] }) # 1. 新增occurrence_columnA:统计column A各值的出现次数 df['occurrence_columnA'] = df.groupby('column A')['column A'].transform('count') # 2. 新增occurrence_both_columns:统计column A和column B值组合的出现次数 df['occurrence_both_columns'] = df.groupby(['column A', 'column B'])['column A'].transform('count') # 3. 新增Ratio:计算百分比占比,如需和示例一致保留两位截断小数可把round参数改为round(2, rounding_mode='trunc') df['Ratio'] = (df['occurrence_both_columns'] / df['occurrence_columnA'] * 100).round(2).apply(lambda x: f"{x}%") # 可选:和示例输出对齐,把column A里的New York修改为Newyork df['column A'] = df['column A'].replace('New York', 'Newyork')
运行后输出结果如下:
| column A | column B | occurrence_columnA | occurrence_both_columns | Ratio |
|---|---|---|---|---|
| Atlanta | AT | 2 | 2 | 100.0% |
| Atlanta | AT | 2 | 2 | 100.0% |
| Newyork | NY | 3 | 2 | 66.67% |
| Newyork | NY | 3 | 2 | 66.67% |
| Newyork | AT | 3 | 1 | 33.33% |
内容的提问来源于stack exchange,提问作者Daven1
相关产品推荐
相关产品推荐

