Pandas 在组和支点报告中排名前 n

Posted

技术标签:

【中文标题】Pandas 在组和支点报告中排名前 n【英文标题】:Pandas report top-n in group and pivot 【发布时间】:2014-10-10 22:55:03 【问题描述】:

我试图通过沿单个维度 d1 分组并报告 d1 的每个元素的汇总统计信息来汇总数据框。特别是我对一些指标的前 n 个(索引和值)感兴趣。 我想要为 d1 的每个元素生成一行。

假设我有两个维度 d1、d2 和 4 个指标 m1、m2、m3、m4

1) 建议的按 d1 分组的方法是什么,并为每个指标 m1 - m4 找到前 n d2 和指标值。

在 Wes 的《Python for Data Analysis》一书中,他建议(第 35 页)

def get_top1000(group):
 return group.sort_index(by='births', ascending=False)[:1000]
grouped = names.groupby(['year', 'sex'])
top1000 = grouped.apply(get_top1000)

这仍然是推荐的方式吗(我只对 1000 名中的前 5 名 d2 以及多个指标感兴趣) 2)现在下一个问题是我想旋转前 5 个(即,我对 d1 的每个元素都有一行)

因此,对于维度 d1、d2 和度量 m1,生成的数据框应如下所示: 索引 d1 和 d2 的前 5 个值和 m1 的相应值的列

d1 d2-1 d2-2 d2-3 d2-4 d2-5 m1-1 m1-2 m1-3 m1-4 m1-5

....

因此,我必须沿 d2 创建排名(即 1 到 5 - 这是我的列字段)。如果我总是有 5 个条目,这将很容易,但对于给定的 d1 值,有时 d2 的元素少于 5 个。

有人可以建议如何为分组添加排名,以便我有正确的列索引来执行透视

【问题讨论】:

您确实应该更好地说明您想要的格式。包括一些虚假数据和您的预期输出 【参考方案1】:

我没有任何可使用的玩具数据或可比较的预期结果,但我认为您想要以下内容:

N = 1000
names = my_fake_data_loader()
grouped = names.groupby(['year', 'sex'])
grouped.apply(lambda g: g.sort_index(by='births', ascending=False).head(N))

这将分配给每个组的前 1000 个元素。

【讨论】:

以上是关于Pandas 在组和支点报告中排名前 n的主要内容,如果未能解决你的问题,请参考以下文章

组和量词 m,n

Pandas 变量在组内移动

Pandas:在组复杂问题中使用条件迭代和插入列

ExpandableListView 中的组和子分隔符

Pandas for 在组上循环

在组内使用 pandas.shift()