我有一个如下所示的 DataFrame 示例:
import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':[1,2,2,2,3,3,], 'date':array(['2000-01-01','2002-01-01','2010-01-01','2003-01-01','2004-01-01','2008-01-01'],dtype='datetime64[D]')})
我正在尝试获取每个 ID 组中的第 2 个最早的一天。所以我写了下面的函数:
def f(x):
if len(x)==1:
return x[0]
else:
x.sort()
return x[1]
然后我写道:
df.groupby('ID').date.apply(lambda x:f(x))
结果是错误的。
你能找到一种方法来完成这项工作吗?
最佳答案
这需要 0.14.1。并且会非常高效,尤其是当您有大型群组时(因为这不需要对它们进行完全排序)。
In [32]: df.groupby('ID')['date'].nsmallest(2)
Out[32]:
ID
1 0 2000-01-01
2 1 2002-01-01
3 2003-01-01
3 4 2004-01-01
5 2008-01-01
dtype: datetime64[ns]
In [33]: df.groupby('ID')['date'].nsmallest(2).groupby(level='ID').last()
Out[33]:
ID
1 2000-01-01
2 2003-01-01
3 2008-01-01
dtype: datetime64[ns]
关于 python Pandas : select 2nd smallest value in groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24943902/