2024-04-25 13:55:35 发布
网友
我有一个pandas数据帧,在那里我必须按一些列分组。group by中的大多数组只有一行,但也有少数组具有多行。对于每一个,我只想保留最早的日期。 我尝试过agg和filter函数,但它们似乎不能满足我的需要。在
agg
filter
def first(df): if len(df) > 1: return df.ix[df['date'].idxmin()] else: return df df.groupby(['id', 'period', 'type').agg(first)
按日期排序,然后抓住第一行。在
df.sort_values('date').groupby(['id', 'period', 'type']).first()
用最短日期的索引筛选df。idxmin得到该索引。然后将其传递给loc。在
df
idxmin
loc
df.loc[df.groupby(['id', 'period', 'type']).date.idxmin()]
考虑df
那么
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():
nsmallest()
df.groupby(['id', 'period', 'type']).apply(lambda g: g.nsmallest(1, "date"))
按日期排序,然后抓住第一行。在
用最短日期的索引筛选
df
。idxmin
得到该索引。然后将其传递给loc
。在考虑
^{pr2}$df
那么
也可以使用
nsmallest()
:相关问题 更多 >
编程相关推荐