[英]De-aggregate data in Pandas
我试图弄清楚如何使用 pandas/matplotlib 中的预聚合数据。 我正在从 Kibana/ElasticSearch 中提取我的数据,因此它不是原始数据,它已经被聚合到存储桶中。
一些示例数据看起来像这样(实际数据有更多的类别和存储桶,go 多达 40 个)。
Category,Bucket,Count
A,0,134563
B,0,215777
C,0,149918
A,1,183394
B,1,430333
C,1,234846
A,2,301137
B,2,604825
C,2,369665
A,3,385299
B,3,638058
C,3,471866
我意识到,由于数据已经聚合,我不能使用任何分布图,但我可以在通用条形图中查看上述数据的分布。 这样可行。
我现在要做的是从describe()
以及 plot 中提取统计数据,例如平均值/中位数(每个类别)和其他统计数据。
如何“去聚合”我的数据或以其他方式将其转换回原始数据,以便我可以更自然地使用它?
我从 Pandas 得到提示,获取有关使用np.repeat()
将我的计数扩展到原始数据的预聚合数据的中值/平均值。 我的计数太高了,但我认为我可以除以 10 或 100 以获得合理的近似值。
所以我想我明白我想做什么,我只是不能让 np/pandas 完成这个任务。
np.repeat(df['Bucket'], df['Count'] / 10).describe()
count 411961.000000
mean 1.914108
std 1.023361
min 0.000000
25% 1.000000
50% 2.000000
75% 3.000000
max 3.000000
# Think that's working? But now how do I break it down by Category?
byCat = df.groupby('Category')
np.repeat(byCat['Bucket'], byCat['Count'] / 10).describe()
TypeError: unsupported operand type(s) for /: 'SeriesGroupBy' and 'int'
您可以按类别分组,然后计算每个类别的统计信息:
import pandas as pd
import numpy as np
for cat, df_cat in df.groupby('Category'):
print(f'\nCategory: {cat}')
print(np.repeat(df_cat['Bucket'], df_cat['Count'] / 10).describe())
Output:
Category: A
count 100437.000000
mean 1.933072
std 1.047681
min 0.000000
25% 1.000000
50% 2.000000
75% 3.000000
max 3.000000
Name: Bucket, dtype: float64
Category: B
count 188897.000000
mean 1.881512
std 1.004221
min 0.000000
25% 1.000000
50% 2.000000
75% 3.000000
max 3.000000
Name: Bucket, dtype: float64
Category: C
count 122627.000000
mean 1.948788
std 1.030864
min 0.000000
25% 1.000000
50% 2.000000
75% 3.000000
max 3.000000
Name: Bucket, dtype: float64
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.