在 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 中将百分位数分布显示为数据框的主要内容,如果未能解决你的问题,请参考以下文章