Python通过ID选择具有最大值的最小日期

2024-04-25 13:36:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望只保留行,按ID分组,首先查找最小日期,然后从具有最小日期的行中筛选出更多的行,然后按ID仅保留最大值。可能存在应忽略的空值

df = pd.DataFrame({'ID':[111, 111, 111, 112, 112],
                   'Value':[10, 98, 99, 65, None],
                   'Date': ['1/1/2016', '1/1/2016', '1/3/2016', '1/6/2018', '1/7/2018']})

输入

ID   Value     Date
111  10        1/1/2016
111  98        1/1/2016
111  99        1/3/2016
112  65        1/6/2018
112  NULL      1/7/2018

输出

ID   Value     Date
111  98        1/1/2016
112  65        1/6/2018

我想我已经很接近了,但是输入最小日期让我有点困惑。我正在使用以下工具:

df.groupby("ID").max())


Tags: 工具noneiddataframedfdatevaluenull
1条回答
网友
1楼 · 发布于 2024-04-25 13:36:40

首先筛选最小日期,然后从目标列中获取具有最大值的索引:

df = df.loc[df[df.Date.isin(df.groupby('ID').Date.min())].groupby('ID').Value.idxmax()]

仅向groupby发送一次:

def func(grp):
    return grp.loc[grp[grp.Date==grp.Date.min()].Value.idxmax()]
df = df.groupby('ID').apply(func).reset_index(drop=True)

为了确保日期列是Date,请键入df.Date = pd.to_datetime(df.Date)。虽然我认为你做到了,但是用你的例子运行上面的块是需要的

相关问题 更多 >