【问题标题】:displaying the percentile distribution as a dataframe in python在 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)

【问题讨论】:

    标签: python pandas loops dataframe percentile


    【解决方案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 ;-)
    猜你喜欢
    • 2022-01-26
    • 2022-01-22
    • 2020-09-28
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多