按最大日期过滤和按Pandas分组

5vf7fwbs  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(124)

我想使用此 Dataframe

df = pd.DataFrame({'Serial' : ['A1', 'A1', 'A1', 'B1','B1', 'B1'],'Day' : ['01.01.2022', '01.01.2022', '01.01.2021', '01.01.2019', '01.01.2019', '01.01.2020'],'Else' : ['a', 'b', 'c', 'd','e', 'f']})

groupby Serial并只保留具有max(Day)的行,即下面是我的预期输出:
| 序列号|日|埃尔塞|
| - -|- -|- -|
| A1级|2022年1月1日|一种|
| A1级|2022年1月1日|B|
| 地下一层|2020年1月1日|关闭|
我成功地计算了最大值,但不知道如何使用它来过滤,以获得预期的输出。

df['Day']= pd.to_datetime(df['Day'], format="%d.%m.%Y")
df = df.groupby(['Serial'])['Day'].max()
nlejzf6q

nlejzf6q1#

这里有一种方法
第一个

zte4gxcn

zte4gxcn2#

基于这个answer,你应该首先得到你的日期是最大值的所有索引。然后你可以在你的 Dataframe 上使用你的索引。

df = pd.DataFrame({'Serial' : ['A1', 'A1', 'A1', 'B1','B1', 'B1'],'Day' : ['01.01.2022', '01.01.2022', '01.01.2021', '01.01.2019', '01.01.2019', '01.01.2020'],'Else' : ['a', 'b', 'c', 'd','e', 'f']})
df['Day'] = pd.to_datetime(df['Day'], format="%d.%m.%Y")
idx = df.groupby(['Serial'])['Day'].transform(max) == df['Day']
print(df[idx])

它会给出如下结果

Serial        Day Else
0     A1 2022-01-01    a
1     A1 2022-01-01    b
5     B1 2020-01-01    f

相关问题