使用Pandas跨30分钟时间段对列中的字符串值进行计数

2024-05-16 23:11:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望通过一个3个月的数据样本来确定列中字符串变量的计数。每天随机抽取样本。我可以按小时对数据进行分组,但我要求对大约10k行的数据保持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
 ....

Tags: 数据对象字符串示例dfdatetimeindex间隔
1条回答
网友
1楼 · 发布于 2024-05-16 23:11:59

没有直接的方法来对时间组件进行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

相关问题 更多 >