在Pandas中按姓名分组计算周一至周五分数的百分比提升
解决方法
首先构造示例DataFrame:
import pandas as pd data = { '姓名': ['Al', 'Al', 'Bo', 'Bo', 'Cy', 'Cy'], '日期': ['Monday', 'Friday', 'Monday', 'Friday', 'Monday', 'Friday'], '分数': [75, 88, 90, 100, 85, 95] } df1 = pd.DataFrame(data)
方法一:透视表转换(稳妥通用)
先将数据转为宽表,让每个人的周一、周五分数成为单独列:
df_pivot = df1.pivot(index='姓名', columns='日期', values='分数').reset_index()
按公式计算提升百分比并保留两位小数:
df_pivot['提升百分比'] = round(((df_pivot['Friday'] - df_pivot['Monday']) / df_pivot['Monday']) * 100, 2)
提取目标列得到最终结果:
df2 = df_pivot[['姓名', '提升百分比']]
方法二:分组聚合(简洁但依赖行顺序)
如果原始数据中每个姓名的行都是先Monday后Friday,可以直接分组计算:
df2 = df1.groupby('姓名').agg( 提升百分比=('分数', lambda x: round(((x.iloc[1] - x.iloc[0])/x.iloc[0])*100, 2)) ).reset_index()
两种方法最终得到的df2都符合需求:
| 姓名 | 提升百分比 |
|---|---|
| Al | 17.33 |
| Bo | 11.11 |
| Cy | 11.76 |
内容的提问来源于stack exchange,提问作者FlyingZeppo
相关产品推荐
相关产品推荐

