此问题在此处已有答案:
Get the row(s) which have the max value in groups using groupby(15个回答)
28天前关闭。
按多个列分组,然后只采用唯一名称值的最近日期以及与之关联的所有列
数据
ID name size stat days month date year
db11AA cc 5 TRUE 10 June 6/1/2023 2023
db11AA kj 9 FALSE 10 June 6/5/2023 2023
db11AA cc 7 TRUE 10 June 6/2/2023 2023
db11AA aa 2 TRUE 60 June 6/2/2023 2023
db22BB bb 1 TRUE 10 June 6/30/2023 2023
db22BB vl 2 FALSE 60 June 6/29/2023 2023
db11BB ss 2 FALSE 10 April 4/2/2023 2023
db11BB ss 2 FALSE 10 April 4/1/2023 2023
db67CC la 1 FALSE 60 June 6/3/2024 2024
db67CC la 0 FALSE 60 June 6/5/2024 2024
db11AA cc 20 TRUE 10 May 5/1/2023 2024
db11AA kj 30 FALSE 10 May 5/5/2023 2024
字符串
所需
ID name size stat days month date year
db11AA cc 7 TRUE 10 June 6/2/2023 2023
db11AA kj 9 FALSE 10 June 6/5/2023 2023
db11AA aa 2 TRUE 60 June 6/2/2023 2023
db22BB bb 1 TRUE 10 June 6/30/2023 2023
db22BB vl 2 FALSE 60 June 6/29/2023 2023
db11BB ss 2 FALSE 10 April 4/2/2023 2023
db67CC la 0 FALSE 60 June 6/5/2024 2024
db11AA cc 20 TRUE 10 May 5/1/2023 2024
db11AA kj 30 FALSE 10 May 5/5/2023 2024
型
逻辑:我们可以有重复的ID,但名称值必须是唯一的,并显示最近的日期。
在做
# Group the DataFrame by 'ID' and 'month' and select the row with the maximum 'size' value
df = df.groupby(['ID', 'month']).apply(lambda x: x.loc[x['date'].idxmax()])
型
我想我应该使用lambda,但不确定,因为上面的脚本仍然会重复行。任何建议都很感激。
2条答案
按热度按时间8ehkhllq1#
IIUC,您可以尝试:
字符串
印刷品:
型
nwwlzxa72#
你不需要在这里使用
apply
,但你也必须按name
分组,正如我在你之前(已删除)的问题中所建议的那样:字符串
输出量:
型