使用熊猫计算30分钟时段内的列中的字符串值

时间:2018-09-13 23:32:02

标签: python pandas datetime time-series

我希望确定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
 ....

1 个答案:

答案 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