现状
我有一个熊猫数据帧定义如下:熊猫:分组和聚合具有多种功能
import pandas as pd
headers = ['Group', 'Element', 'Case', 'Score', 'Evaluation']
data = [
['A', 1, 'x', 1.40, 0.59],
['A', 1, 'y', 9.19, 0.52],
['A', 2, 'x', 8.82, 0.80],
['A', 2, 'y', 7.18, 0.41],
['B', 1, 'x', 1.38, 0.22],
['B', 1, 'y', 7.14, 0.10],
['B', 2, 'x', 9.12, 0.28],
['B', 2, 'y', 4.11, 0.97],
]
df = pd.DataFrame(data, columns=headers)
它看起来像这样在控制台输出:
Group Element Case Score Evaluation
0 A 1 x 1.40 0.59
1 A 1 y 9.19 0.52
2 A 2 x 8.82 0.80
3 A 2 y 7.18 0.41
4 B 1 x 1.38 0.22
5 B 1 y 7.14 0.10
6 B 2 x 9.12 0.28
7 B 2 y 4.11 0.97
问题
我想对执行分组和汇总操作会给我下面的结果数据框:
Group Max_score_value Max_score_element Max_score_case Min_evaluation
0 A 9.19 1 y 0.41
1 B 9.12 2 x 0.10
要澄清的详细信息:我想组由Group
列,然后应用聚合,得到以下结果列:
Max_score_value
:来自Score
列的组最大值。Max_score_element
:从对应于所述基团的最大Score
值Element
列的值。Max_score_case
:从对应于所述基团的最大Score
值Case
列的值。Min_evaluation
:从Evaluation
列中的基团的最小值。因此
尝试远
我来为分组和聚集下面的代码:
result = (
df.set_index(['Element', 'Case'])
.groupby('Group')
.agg({'Score': ['max', 'idxmax'], 'Evaluation': 'min'})
.reset_index()
)
print(result)
这给作为输出:
Group Score Evaluation
max idxmax min
0 A 9.19 (1, y) 0.41
1 B 9.12 (2, x) 0.10
由于你可以看到基本数据在那里,但它还不是我需要的格式。这是我努力的最后一步。有没有人有这样的想法来生成我想要的格式的结果数据框?
哦,明确设定指标和加入后这是一个不错的改进。 – tarashypka
我很高兴从这里所有海报的优秀答案。我认为现在我会用Psidom的答案中的'join'来解决这个问题,因为我喜欢低冗长度。没关系,这是慢一点,因为我当前程序中的性能瓶颈在其他地方。 – Xukrao