![](/img/trans.png)
[英]Groupby count only when a certain value is present in one of the column in pandas
[英]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.