我有一个数据框“ 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()
但是我不确定如何从这里继续。
答案 0 :(得分:2)
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))