如何用Pandas批量计算列相对占比,无需编写单独语句?
解决方案
可以通过Pandas的Series链式调用实现一次性完成所有占比计算,无需拆分多条语句。假设你的数据集已加载为DataFrame df,直接用以下代码即可得到目标格式的结果:
import pandas as pd # 一条语句完成计算与格式转换 result_df = ( pd.Series({ 'Athlete': round(df['Athlete'].sum() / len(df) * 100), 'Baseball': round(df['Baseball'].sum() / df['Athlete'].sum() * 100), 'Cheer': round(df['Cheer'].sum() / df['Athlete'].sum() * 100), 'Football': round(df['Football'].sum() / df['Athlete'].sum() * 100) }) .reset_index() .rename(columns={'index': 'header 1', 0: ''}) ) print(result_df)
代码说明
- 用字典式
pd.Series批量定义所有计算项:- 运动员占总人数比例:通过
df['Athlete'].sum()统计运动员总数,除以总学生数len(df)后乘100 - 各项目占运动员比例:对应项目的总和除以运动员总数,再乘100
- 运动员占总人数比例:通过
- 链式调用
reset_index()将Series转为DataFrame,再用rename()修改列名,完全匹配你期望的输出格式
运行后输出结果如下:
| header 1 | |
|---|---|
| Athlete | 75 |
| Baseball | 33 |
| Cheer | 33 |
| Football | 33 |
内容的提问来源于stack exchange,提问作者M J
相关产品推荐
相关产品推荐

