熊猫数据框中的组分析

时间:2019-06-04 17:21:13

标签: pandas dataframe group-by

我有一个数据框“ order_data”,其中包含有关每日订单的详细信息,其中一列:日期时间格式的“日期”,第二列:“大小”,其中三个订单大小可以是“ A”,“ B”,或“ C”。

我想分析每个5分钟间隔的订单大小拆分,显示它们相应的百分比(例如18:30-18:35:A = 50%,B = 30%,C = 20%)。

到目前为止,我已经能够按5分钟的间隔对订单进行分组,并使用熊猫“ groupby”对其进行计数,如下所示:

grouped=order_data.groupby([pd.Grouper(key='date', freq='5T')]).count()

但是我不确定如何从这里继续。

1 个答案:

答案 0 :(得分:2)

在5分钟的间隔和group列上分别为

'size'。然后divide以该时间间隔内的总和进行归一化。

样本数据:

import pandas as pd
import numpy as np

N = 10000
np.random.seed(1)
df = pd.DataFrame({'date': pd.date_range('2011-01-01', freq='1.15S', periods=N),
                   'size': np.random.choice(['A', 'B', 'C'], N)})

代码:

gp = df.groupby([pd.Grouper(key='date', freq='5T'), 'size']).size().unstack(-1)
gp = gp.divide(gp.sum(axis=1), axis=0).multiply(100)

#size                         A          B          C
#date                                                
#2011-01-01 00:00:00  36.781609  34.099617  29.118774
#2011-01-01 00:05:00  36.015326  28.352490  35.632184
#2011-01-01 00:10:00  30.268199  32.950192  36.781609
#2011-01-01 00:15:00  29.885057  37.164751  32.950192
#...

或者使用归一化的value_counts,仅每5分钟间隔一次:

gp = (df.groupby(pd.Grouper(key='date', freq='5T'))['size']
        .value_counts(normalize=True).unstack(-1)
        .multiply(100))