python - Pandas - 在 groupby 中聚合、排序和最大

标签 python pandas

我有以下数据框:

                       some_id
2016-12-26 11:03:10        001
2016-12-26 11:03:13        001
2016-12-26 12:03:13        001
2016-12-26 12:03:13        008
2016-12-27 11:03:10        009
2016-12-27 11:03:13        009
2016-12-27 12:03:13        003
2016-12-27 12:03:13        011

我需要做一些类似 transform('size') 的事情,并得到 N 个最大值。 要得到这样的东西 (N=2):

             some_id   size
2016-12-26       001      3
                 008      1
2016-12-27       009      2
                 003      1

在 pandas 0.19.x 中是否有优雅的方式来做到这一点?

最佳答案

使用value_counts在对 DateTimeIndexdate 部分进行分组后计算非重复计数。默认情况下,这会按降序对它们进行排序。

您只需取此结果的最上面的 2 行即可获得最大的(前 2)部分。

fnc = lambda x: x.value_counts().head(2)
grp = df.groupby(df.index.date)['some_id'].apply(fnc).reset_index(1, name='size')
grp.rename(columns={'level_1':'some_id'})

enter image description here

关于python - Pandas - 在 groupby 中聚合、排序和最大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41333864/

相关文章:

python - 将 GSL(或其他库)静态链接到共享库

python - 从 Pandas 数据框创建嵌套列表

python - 使用 pd.Grouper() 获取第一个和最后一个元素

python - Pandas :如何在使用 read_csv 时获取行读取状态?

python - 如何将类型为 "object"的时间戳列转换为正确的 "time"类型?

Python - 具有稀疏结果的矩阵乘法

python - 将 pandas.Series 直方图保存到文件

python - 使用 Python 查找最相似的行

python - Instance() 在 Python 作业中做什么?

python mysqldb 一个连接的多个游标