【发布时间】:2025-11-28 06:10:01
【问题描述】:
这是一个可重现的例子:
import pandas as pd
df = pd.DataFrame([['Type A', 'Event1', 1, 2, 3], ['Type A', 'Event1', 4, 5, 6], ['Type A', 'Event1', 7, 8, 9],
['Type A', 'Event2', 10, 11, 12], ['Type A', 'Event2', 13, 14, 15], ['Type A', 'Event2', 16, 17, 18], \
['Type B', 'Event1', 19, 20, 21], ['Type B', 'Event1', 22, 23, 24], ['Type B', 'Event1', 25, 26, 27], \
['Type B', 'Event2', 28, 29, 30], ['Type B', 'Event2', 31, 32, 33], ['Type B', 'Event2', 34, 35, 36]])
df.columns = ['TypeName', 'EventNumber', 'PricePart1', 'PricePart2', 'PricePart3']
print(df)
给予:
TypeName EventNumber PricePart1 PricePart2 PricePart3
0 Type A Event1 1 2 3
1 Type A Event1 4 5 6
2 Type A Event1 7 8 9
3 Type A Event2 10 11 12
4 Type A Event2 13 14 15
5 Type A Event2 16 17 18
6 Type B Event1 19 20 21
7 Type B Event1 22 23 24
8 Type B Event1 25 26 27
9 Type B Event2 28 29 30
10 Type B Event2 31 32 33
11 Type B Event2 34 35 36
这是我尝试过的:
df['Average'] = df[['PricePart1', 'PricePart2', 'PricePart3']].mean(axis = 1)
print(df)
TypeName EventNumber PricePart1 PricePart2 PricePart3 Average
0 Type A Event1 1 2 3 2.0
1 Type A Event1 4 5 6 5.0
2 Type A Event1 7 8 9 8.0
3 Type A Event2 10 11 12 11.0
4 Type A Event2 13 14 15 14.0
5 Type A Event2 16 17 18 17.0
6 Type B Event1 19 20 21 20.0
7 Type B Event1 22 23 24 23.0
8 Type B Event1 25 26 27 26.0
9 Type B Event2 28 29 30 29.0
10 Type B Event2 31 32 33 32.0
11 Type B Event2 34 35 36 35.0
现在我有了一个名为 Average 的新列,我可以按 TypeName、EventNumber 列分组,并使用这段代码找到第 25 和第 50 个百分位数:
print(df.groupby(['TypeName', 'EventNumber'])['Average'].quantile([0.25, 0.50]).reset_index())
我有什么:
TypeName EventNumber level_2 Average
0 Type A Event1 0.25 3.5
1 Type A Event1 0.50 5.0
2 Type A Event2 0.25 12.5
3 Type A Event2 0.50 14.0
4 Type B Event1 0.25 21.5
5 Type B Event1 0.50 23.0
6 Type B Event2 0.25 30.5
7 Type B Event2 0.50 32.0
我希望 level_2 作为单独的列,其中包含来自 Average 列的值,就像我创建的输出 DataFrame 一样:
df1 = pd.DataFrame([['Type A', 'Event1', 3.5, 5], ['Type A', 'Event2', 12.5, 14], ['Type B', 'Event1', 21.5, 23], ['Type B', 'Event2', 30.5, 32]])
df1.columns = ['TypeName', 'EventNumber', '0.25', '0.50']
print(df1)
我想要什么:
TypeName EventNumber 0.25 0.50
0 Type A Event1 3.5 5
1 Type A Event2 12.5 14
2 Type B Event1 21.5 23
3 Type B Event2 30.5 32
我非常确定这是一些重复的,但我已经通过 * 进行了搜索,但由于问题的措辞困难(或者可能只是我很愚蠢)而没有找到我的答案
【问题讨论】:
标签: python python-3.x pandas pandas-groupby