python - Groupby 所选 DataFrame 列的值的给定百分位数

标签 python pandas group-by

假设我有一个 DataFrame,其中的列仅包含实数值。

>> df        
          col1   col2      col3  
0     0.907609     82  4.207991 
1     3.743659   1523  6.488842 
2     2.358696    324  5.092592  
3     0.006793      0  0.000000  
4    19.319746  11969  7.405685 

我想按所选列(例如 col1)的四分位数(或我指定的任何其他百分位数)对其进行分组,以对这些组执行一些操作。理想情况下,我想做类似的事情:

df.groupy( quartiles_of_col1 ).mean()  # not working, how to code quartiles_of_col1?

输出应给出对应于 col1 四分位数的四个组的每一列的平均值。这可以用 groupby 命令实现吗?实现它的最简单方法是什么?

最佳答案

我现在没有电脑来测试它,但我认为你可以通过以下方式进行测试:df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0 , 25, 75, 90, 100]), include_lowest=True)).mean().将在 150 分钟后更新。

一些解释:

In [42]:
#use np.percentile to get the bin edges of any percentile you want 
np.percentile(df.col0, [0, 25, 75, 90, 100])
Out[42]:
[0.0067930000000000004,
 0.907609,
 3.7436589999999996,
 13.089311200000001,
 19.319745999999999]
In [43]:
#Need to use include_lowest=True
print df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0, 25, 75, 90, 100]), include_lowest=True)).mean()
                       col0     col1      col2
col0                                          
[0.00679, 0.908]   0.457201     41.0  2.103996
(0.908, 3.744]     3.051177    923.5  5.790717
(3.744, 13.0893]        NaN      NaN       NaN
(13.0893, 19.32]  19.319746  11969.0  7.405685
In [44]:
#Or the smallest values will be skiped
print df.groupby(pd.cut(df.col0, np.percentile(df.col0, [0, 25, 75, 90, 100]))).mean()
                       col0     col1      col2
col0                                          
(0.00679, 0.908]   0.907609     82.0  4.207991
(0.908, 3.744]     3.051177    923.5  5.790717
(3.744, 13.0893]        NaN      NaN       NaN
(13.0893, 19.32]  19.319746  11969.0  7.405685

关于python - Groupby 所选 DataFrame 列的值的给定百分位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24657177/

相关文章:

python - Django 使用 IP 地址定义默认 View

python-2.7 - 如何在 Pandas 的一列中查找 Nan 之前的第一个非 NAN 数据

python - 如何将具有不等大小和元素列表的字典转换为具有 1 和 0 值的 Dataframe

ruby-on-rails - 如何在 rails 中按行计数?

python - 如何从 pandas groupby().sum() 的输出创建新列?

python - QueryFrame 是如何工作的?

python - 如何在从elasticsearch导出的CSV文件中打印列名?

python - Pandas 加入与添加列

php - 检查group by中是否有一行为空

python 运行时错误 : "mi" not found for replace