在 python 中将百分位数分布显示为数据框

Posted

技术标签:

【中文标题】在 python 中将百分位数分布显示为数据框【英文标题】:displaying the percentile distribution as a dataframe in python 【发布时间】:2018-05-11 02:35:21 【问题描述】:

我正在尝试将每列的百分位分布输出显示为数据框,因为我想稍后将其导出到 csv。

我只是像这样循环了所有列:

for column in data:
    print(data[column].describe([.01,.1,.2,.3,.4,.5,.6,.7,.8,.9,.99]))

但是,我不知道如何休息。非常感谢任何帮助!

+用附加查询编辑主要问题:

我还想按data.groupby(data['MARKET']).describe([.01,.1,.2,.3,.4,.5,.6‌​,.7,.8,.9,.99]) 之类的列对我的输出进行分组但是,我收到类似“describe() 采用 1 个位置参数但给出了 2 个”的错误。我该如何处理这个问题?

样本数据集:

d = 'col1': [1, 2, 3, 2, 1],
     'col2': [3, 4, 5, 6, 7], 
     'country': ['TR', 'UK', 'UK' , 'TR', 'TR'];

df = pd.DataFrame(data=d)

【问题讨论】:

【参考方案1】:

这是你想要的吗?

In [19]: df = pd.DataFrame(np.arange(15).reshape(5,3)).add_prefix('col')

In [20]: df
Out[20]:
   col0  col1  col2
0     0     1     2
1     3     4     5
2     6     7     8
3     9    10    11
4    12    13    14

In [21]: df.describe([.01,.1,.2,.3,.4,.5,.6,.7,.8,.9,.99])
Out[21]:
            col0       col1       col2
count   5.000000   5.000000   5.000000
mean    6.000000   7.000000   8.000000
std     4.743416   4.743416   4.743416
min     0.000000   1.000000   2.000000
1%      0.120000   1.120000   2.120000
10%     1.200000   2.200000   3.200000
20%     2.400000   3.400000   4.400000
30%     3.600000   4.600000   5.600000
40%     4.800000   5.800000   6.800000
50%     6.000000   7.000000   8.000000
60%     7.200000   8.200000   9.200000
70%     8.400000   9.400000  10.400000
80%     9.600000  10.600000  11.600000
90%    10.800000  11.800000  12.800000
99%    11.880000  12.880000  13.880000
max    12.000000  13.000000  14.000000

更新:

d = 'col1': [1, 2, 3, 2, 1], 'col2': [3, 4, 5, 6, 7], '国家': ['TR', 'UK', 'UK' , 'TR', 'TR'];

df = pd.DataFrame(data=d)

In [29]: df.groupby('country').apply(lambda x: x.describe([.01,.1,.2,.3,.4,.5,.6,.7,.8,.9,.99]))
Out[29]:
                   col1      col2
country
TR      count  3.000000  3.000000
        mean   1.333333  5.333333
        std    0.577350  2.081666
        min    1.000000  3.000000
        1%     1.000000  3.060000
        10%    1.000000  3.600000
        20%    1.000000  4.200000
        30%    1.000000  4.800000
        40%    1.000000  5.400000
        50%    1.000000  6.000000
        60%    1.200000  6.200000
        70%    1.400000  6.400000
        80%    1.600000  6.600000
        90%    1.800000  6.800000
        99%    1.980000  6.980000
        max    2.000000  7.000000
UK      count  2.000000  2.000000
        mean   2.500000  4.500000
        std    0.707107  0.707107
        min    2.000000  4.000000
        1%     2.010000  4.010000
        10%    2.100000  4.100000
        20%    2.200000  4.200000
        30%    2.300000  4.300000
        40%    2.400000  4.400000
        50%    2.500000  4.500000
        60%    2.600000  4.600000
        70%    2.700000  4.700000
        80%    2.800000  4.800000
        90%    2.900000  4.900000
        99%    2.990000  4.990000
        max    3.000000  5.000000

【讨论】:

没错!非常感谢!我错过了在主要问题中再问一件事,我还想按 data.groupby(data['MARKET']).describe([.01,.1,.2,.3, .4,.5,.6,.7,.8,.9,.99]) 但是,我收到类似“describe() 采用 1 个位置参数但给出了 2 个”的错误。我该如何处理这个问题? @CagdasKanar,欢迎您! :) 我认为我们无法看到您的样本数据集和您想要的数据集。请在您的问题中发布一个小的可重复样本数据集和您想要的数据集... d = 'col1': [1, 2, 3, 2, 1], 'col2': [3, 4, 5, 6, 7], '国家': ['TR ', 'UK', 'UK' , 'TR', 'TR'] df = pd.DataFrame(data=d) 太棒了!最后一件事@MaxU,在csv输出中我看不到groupby元素,之后我已经完成了这些步骤,似乎我遗漏了一些东西:x=data.groupby('COUNTRY').apply(lambda x: x .describe([.01,.1,.2,.3,.4,.5,.6,.7,.8,.9,.99])) x.to_csv('x.csv', index =假) @CagdasKanar,使用index=True ;-)

以上是关于在 python 中将百分位数分布显示为数据框的主要内容,如果未能解决你的问题,请参考以下文章

第六周:统计学

用R语言的quantreg包进行分位数回归

R语言箱线图(boxplot)四分位算法

【R语言】--- 箱型图

聊聊python的分位数

百亿级监控场景大数据分位值计算实践