[英]Output after groupby and aggregation
我有一個PANDAS數據框。 當我創建GROUP BY和諸如min或max的聚合函數時,我只會得到部分結果,即在數字列上進行min / max聚合的列。 如何獲得完整的行,即與該最小/最大對應的所有數據?
數據框看起來像:
Place Year Time TimeS
BOSTON 1973 02:16:03 8163
FUKUOKA 1973 02:11:45 7905
NEW YORK 1973 02:21:54 8514
BERLIN 1974 02:44:53 9893
BOSTON 1974 02:13:39 8019
FUKUOKA 1974 02:11:32 7892
NEW YORK 1974 02:26:30 8790
我想要每年和城市實現的最小或最大時間。 我只能花時間了(馬拉松是pandas.DataFrame的名稱)
marathon.groupby('year').TimeS.max()
給出:
1973 02:21:54
1974 02:44:53
我怎么有這個時間對應的地方? 即:
NEW YORK 1973 02:21:54
BERLIN 1974 02:44:53
肯定有很多方法可以做到這一點。 這是兩個:
marathon[marathon.TimeS == marathon.groupby('Year').TimeS.transform('max')]
要么
marathon[marathon.TimeS.isin(marathon.groupby('Year').TimeS.max())]
我們來看看其中一些中間對象
In [29]: marathon.groupby('Year').TimeS.max()
Out[29]:
Year
1973 8514
1974 9893
Name: TimeS, dtype: int64
這樣我們得到了一個序列,但是只有兩個值。 因此,無論列值等於其中之一,我們都可以為數據幀建立索引,這是第二種解決方案。
第一種解決方案使用transform('max')
代替,它保留了數據幀的大小:
In [30]: marathon.groupby('Year').TimeS.transform('max')
Out[30]:
0 8514
1 8514
2 8514
3 9893
4 9893
5 9893
6 9893
Name: TimeS, dtype: int64
所以現在它的大小是相同的,我們可以將相等直接與其相等的列進行比較。
請注意,如果最大值多次出現,則這兩種方法也會返回重復項,而這可能是您想要的,也可能不是。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.