簡體   English   中英

在pandas中將“groupby”的最大值僅取為一列

[英]Taking maximum value of only one column by “groupby” in pandas

我有一個包含10列的數據框:

id        date         value
1233     2014-10-3     1.123123
3412     2015-05-31    2.123123
3123     2015-05-31    5.6234234
3123     2013-03-21    5.6234222
3412     2014-11-21    4.776666
5121     2015-08-22    5.234234

我想按id列分組並采取最新date 但我不希望采取的最大的value列。 我想取這個行的值,它屬於最大日期。

pd.groupby('id').max()不起作用。 我該如何解決?

最重要的是,我想保留數據集中的所有列。

您可以使用布爾索引來選擇組中的最大日期,並按組返回該行:

df.groupby('id').apply(lambda x: x.loc[x.date == x.date.max(),['date','value']])

或者,使用idxmax選擇每個組中該最大值的索引:

df.groupby('id').apply(lambda x: x.loc[x.date.idxmax(),['date','value']]).reset_index()

輸出:

     id       date     value
0  1233 2014-10-03  1.123123
1  3123 2015-05-31  5.623423
2  3412 2015-05-31  2.123123
3  5121 2015-08-22  5.234234

或者你可以first使用sort_value

df.sort_values(['date', 'value'], ascending=[False, True]).groupby('id').first()

Out[480]: 
           date     value
id                       
1233 2014-10-03  1.123123
3123 2015-05-31  5.623423
3412 2015-05-31  2.123123
5121 2015-08-22  5.234234

您可以按日期排序,然后只保留每個ID的第一個外觀。

df = df.sort_values('date', ascending=False)

most_recent = df.drop_duplicates('id', keep='first')

most_recent

Out: 
     id        date     value
0  5121  2015-08-22  5.234234
1  3412  2015-05-31  2.123123
2  3123  2015-05-31  5.623423
4  1233   2014-10-3  1.123123

如果要返回包含最大日期的整行,則需要使用idxmax

result_row = df.iloc[df['date'].idxmax()]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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