簡體   English   中英

分組和匯總后的輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM