我在熊貓數據框中有數據,並且需要對它進行聚合。我需要在類似於下面的不同列上進行不同的聚合。如何使用pandas groupby實現多個聚合,引用特定列
group min(rank) min(rank) min sum
title t_no t_descr rank stores
A 1 a 1 1000
B 1 a 1 1000
B 2 b 2 800
C 2 b 2 800
D 1 a 1 1000
D 2 b 2 800
F 4 d 4 500
E 3 c 3 700
到:
title t_no t_descr rank stores
A 1 a 1 1000
B 1 a 1 1800
C 2 b 2 800
D 1 a 1 1800
E 3 c 3 700
F 4 d 4 500
你會發現,標題B和d已經彙總,保持T_NR中& t_descr是對應的最低軍銜爲各自的題目組,而商店總結。 t_no & t_descr只是任意文本。我需要按冠軍頭銜排名,總結商店,並保留相應的t_no & t_descr。
我該如何在一個熊貓羣體中做到這一點?這是虛擬數據;我正在處理的真正問題有更多的聚合,我不想單獨做每個聚合,我知道該怎麼做。
我從下面開始,但是意識到我真的需要t_no & t_descr的最大值是基於子組的排列,而不是列本身。
aggs = {
'rank': 'min',
't_no': 'min', # need t_no for row that is min(rank) by title.
't_descr': 'min' # need t_descr for row that is min(rank) by title.
}
df2.groupby('title').agg(aggs).reset_index()
也許有辦法用lambda來做到這一點?我確信有一個簡單的方法來做到這一點。如果groupby不是正確的方法,我顯然會接受建議。
謝謝!
加入它,我發佈了一個答案是與你的嘗試類似,但後來意識到你正在嘗試做一些不同的事情。如果您更改了「t_descr」的字母順序以顯示該列基於另一列的最小值而不是自己的最小值的示例,將會有所幫助。 – pshep123
嘿@ pshep123感謝您的評論!我更新了一下這個例子。爲了解釋,t_no和t_descr只是隨機文本字段。我需要按照標題保留與排名最小值相關的字段。 – claybot
更改B或D中的「t_descr」以顛倒字母順序,您的示例將突出顯示該需求。當前代碼中找到't_descr'的最小值,儘管使用了不正確的邏輯,但仍會產生所需的結果。 – pshep123