我希望确定3个月数据样本中某列中字符串变量的数量。每天随机抽取样品。我可以按小时对数据进行分组,但是我需要对大约1万行数据保持30分钟的间隔(例如0500-0600、0600-0630)。
数据示例:
datetime stringvalues
2018-06-06 17:00 A
2018-06-07 17:30 B
2018-06-07 17:33 A
2018-06-08 19:00 B
2018-06-09 05:27 A
我尝试将datetime列设置为索引,但是我无法弄清楚如何将数据分组到'hour'以外的任何内容上,而且我对字符串值的计数没有忠诚度:
df['datetime'] = pd.to_datetime(df['datetime']
df.index = df['datetime']
df.groupby(df.index.hour).count()
哪个返回的输出类似于:
datetime stringvalues
datetime
5 0 0
6 2 2
7 5 5
8 1 1
...
过去两天,我对多重索引和重采样进行了一定程度的研究,但未能找到类似的问题。所需的结果如下所示:
datetime A B
0500 1 2
0530 3 5
0600 4 6
0630 2 0
....
答案 0 :(得分:1)
没有一种直接的方法可以对时间分量进行TimeGrouper
,因此我们分两步进行:
v = (df.groupby([pd.Grouper(key='datetime', freq='30min'), 'stringvalues'])
.size()
.unstack(fill_value=0))
v.groupby(v.index.time).sum()
stringvalues A B
05:00:00 1 0
17:00:00 1 0
17:30:00 1 1
19:00:00 0 1