如何按列值对Python Pandas数据框进行十分位数划分,然后对每个十分位数求和?

8

假设有一个只有一个数字列的数据框,将其按降序排序。

我想得到的是一个新的数据框,其中包含10行数据,第一行是最小10%值的总和,第十行是最大10%值的总和。

我可以通过非pythonic的方式来计算这个值,但我认为一定有更加时尚和pythonic的方法来实现。

需要帮助吗?

谢谢!

1个回答

15

您可以使用pd.qcut来完成此操作:

df = pd.DataFrame({'A':np.random.randn(100)})

# pd.qcut(df.A, 10) will bin into deciles
# you can group by these deciles and take the sums in one step like so:
df.groupby(pd.qcut(df.A, 10))['A'].sum()
# A
# (-2.662, -1.209]   -16.436286
# (-1.209, -0.866]   -10.348697
# (-0.866, -0.612]    -7.133950
# (-0.612, -0.323]    -4.847695
# (-0.323, -0.129]    -2.187459
# (-0.129, 0.0699]    -0.678615
# (0.0699, 0.368]      2.007176
# (0.368, 0.795]       5.457153
# (0.795, 1.386]      11.551413
# (1.386, 3.664]      20.575449

pandas.qcut 文档


3
美妙啊!Pandas所具备的功能,令人惊叹! - Some Guy
1
谢谢cmaher,这正是我所寻找的。 - Windtalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接