按过滤的熊猫数据框分组,然后在每组中选择最新的

时间:2020-05-30 17:43:39

标签: python dataframe pandas-groupby

我面临过滤后的数据帧和分组依据的问题
说我有这个数据框

    id     product   date
0   220    6647     2015-09-01 
1   220    6647     2014-09-03 
2   220    6647     2014-10-16
3   826    3380     2014-11-11
4   826    3380     2015-12-09
5   826    3380     2015-05-19
6   901    4555     2015-09-01
7   901    4555     2014-10-05
8   901    4555     2014-11-01

我想首先选择2015年的行,然后选择groupby id并获取日期的最新信息

我读过this article,在整个df上效果都很好。
但是如果我先尝试像这样过滤df,似乎就行不通了

my_date = datetime.datetime(2014, 12, 31)
df = df[df.date>my_date]

现在我是否运行以下代码

df.loc[df.groupby('id').date.idxmax()]

它给了我以下错误

尝试获取空序列的argmax

任何帮助将不胜感激:) 谢谢

2 个答案:

答案 0 :(得分:0)

df = df[date>my_date]中,您只有date,而没有df.date,因此很可能会导致错误。

此代码:

import pandas as pd
from io import StringIO
from datetime import datetime

txt = '''id     product   date
220    6647     2015-09-01
220    6647     2014-09-03
220    6647     2014-10-16
826    3380     2014-11-11
826    3380     2015-12-09
826    3380     2015-05-19
901    4555     2015-09-01
901    4555     2014-10-05
901    4555     2014-11-01'''

df = pd.read_fwf(StringIO(txt))
df['date'] = pd.to_datetime(df['date']) # convert date to datetime

my_date = datetime(2014, 12, 31)
df = df[df.date>my_date]

print(df.loc[df.groupby('id').date.idxmax()])

打印:

    id  product       date
0  220     6647 2015-09-01
4  826     3380 2015-12-09
6  901     4555 2015-09-01

答案 1 :(得分:0)

好,我知道了
我发布的示例取自另一篇文章,并且效果很好
我自己的例子有些不同
我的数据框分组依据是taype类别
如果我将其保留为对象