Pandas groupby,然后选择on

2024-04-25 13:55:35 发布

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

我有一个pandas数据帧,在那里我必须按一些列分组。group by中的大多数组只有一行,但也有少数组具有多行。对于每一个,我只想保留最早的日期。 我尝试过aggfilter函数,但它们似乎不能满足我的需要。在

def first(df):
        if len(df) > 1:
            return df.ix[df['date'].idxmin()]
        else:
            return df

df.groupby(['id', 'period', 'type').agg(first)

Tags: 数据函数pandasdfdatebylenreturn
3条回答

按日期排序,然后抓住第一行。在

df.sort_values('date').groupby(['id', 'period', 'type']).first()

用最短日期的索引筛选df
idxmin得到该索引。然后将其传递给loc。在

df.loc[df.groupby(['id', 'period', 'type']).date.idxmin()]

考虑df

^{pr2}$

那么

df.loc[df.groupby(['id', 'period', 'type']).date.idxmin()]

  id period type       date
0  a      q    y 2011-03-31
4  b      q    x 2011-01-31

也可以使用nsmallest()

df.groupby(['id', 'period', 'type']).apply(lambda g: g.nsmallest(1, "date"))

相关问题 更多 >