繁体   English   中英

对 Pandas 中的数据进行去聚合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM