【发布时间】:2020-12-20 10:38:07
【问题描述】:
我有一个 DataFrame,其中包含针对不同人的“测试结果”,每个人进行多次测试。
它有 name、age、score 列
scores = pd.DataFrame({'name': ['Alex', 'Alex', 'Alex', 'Alex', 'Alex', 'James', 'James', 'James', 'James', 'James', 'James', 'Emily', 'Emily', 'Emily', 'Emily', 'Emily', 'Emily', 'Emily'], 'age': [25, 26, 26, 27, 27, 25, 26, 26, 26, 27, 27, 25, 25, 26, 26, 26, 27, 27], 'score': [10, 0, 2, 1, 2, 2, 4, 6, 6, 10, 8, 4, 7, 6, 10, 9, 7, 10]})
name age score
0 Alex 25 10
1 Alex 26 0
2 Alex 26 2
3 Alex 27 1
4 Alex 27 2
5 James 25 2
6 James 26 4
7 James 26 6
8 James 26 6
9 James 27 10
10 James 27 8
11 Emily 25 4
12 Emily 25 7
13 Emily 26 6
14 Emily 26 10
15 Emily 26 9
16 Emily 27 7
17 Emily 27 10
我已经对name 和age 进行了分组,并汇总为每个组提供了max_score(这是每年个人score 列的max 值)
age_scores = scores.groupby(['name','age']).agg({"score":'max'})
结果看起来像
score
name age
Alex 25 10
26 2
27 2
Emily 25 7
26 10
27 10
James 25 2
26 6
27 10
我想有一个数据框,每人一行,然后是每个年龄的最高分数列
即
name max_25 max_26 max_27
0 Alex 10 2 2
1 James 7 10 10
2 Emily 2 6 10
【问题讨论】:
-
这能回答你的问题吗? Pivot and rename Pandas dataframe
-
使用
unstack:df.groupby(["name", "age"])["score"].max().unstack()