我有一个如下所示的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]')})
Run Code Online (Sandbox Code Playgroud)
我正在努力争取每个ID组的第二天最早。所以我写了以下函数:
def f(x):
if len(x)==1:
return x[0]
else:
x.sort()
return x[1]
Run Code Online (Sandbox Code Playgroud)
然后我写道:
df.groupby('ID').date.apply(lambda x:f(x))
Run Code Online (Sandbox Code Playgroud)
结果是一个错误。
您能找到一种方法使这项工作吗?
这需要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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4588 次 |
| 最近记录: |