現狀
我有一個熊貓數據幀定義如下:熊貓:分組和聚合具有多種功能
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