python Pandas : select 2nd smallest value in groupby

标签 python pandas

我有一个如下所示的 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/

相关文章:

python - Python中有 `string.split()`的生成器版本吗?

python - Word2VecKeyedVectors 的对象没有属性 'index_to_key'

java - 有人知道如何自动在手机屏幕上找到坏点吗?

python - Numpy 矩阵 If/Else 分类?

python - 如何读取和处理文件的一部分并将其余部分写入另一个文件?

python - Visual Studio Code 告诉我它不能导入 python 模块,但它运行代码

python - 调用 cython 时没有成员 pylint 错误

python - 基于列的条件 cumsum

python - 如何从一个表中删除所有出现的数字,并从另一个表中查找数字?

python - 如何对 pandas DataFrame 中的内部列表进行排序?