首页 > 解决方案 > 如何创建具有多列的 dask 时间序列数据框

问题描述

我无法创建一个计算多列每小时平均值的 dask 时间序列数据框。

这是我的输入 csv 文件的示例:

name,date_time,num
dan,2019-01-02 00:00:00,3
ben,2019-01-02 00:00:00,7
dan,2019-01-02 02:00:00,13
dan,2019-01-02 10:00:00,9
dan,2019-01-02 10:01:00,3
ben,2019-01-02 14:22:00,66
ben,2019-01-02 14:37:00,37

我可以使用 pandas 产生所需的输出

import pandas as pd
from matplotlib import pyplot

df = pd.read_csv('my_file.csv')

df['timestamp'] = pd.to_datetime(df.date_time)
df = df.set_index(df.timestamp) # set a datetime index

df = df.groupby('name').resample('H')['num'].mean().unstack('name')

df.fillna(0).plot()

期望的输出

            name    ben dan
timestamp       
2019-01-02 00:00:00 7.0 3.0
2019-01-02 01:00:00 NaN NaN
2019-01-02 02:00:00 NaN 13.0
2019-01-02 03:00:00 NaN NaN
2019-01-02 04:00:00 NaN NaN
2019-01-02 05:00:00 NaN NaN
2019-01-02 06:00:00 NaN NaN
2019-01-02 07:00:00 NaN NaN
2019-01-02 08:00:00 NaN NaN
2019-01-02 09:00:00 NaN NaN
2019-01-02 10:00:00 NaN 6.0
2019-01-02 11:00:00 NaN NaN
2019-01-02 12:00:00 NaN NaN
2019-01-02 13:00:00 NaN NaN
2019-01-02 14:00:00 51.5 NaN

我尝试用 dask 生成相同的数据帧

from dask import dataframe as dd
from matplotlib import pyplot

ddf = dd.read_csv('my_file.csv')

# setting an index
ddf['timestamp'] = dd.to_datetime(ddf.date_time)
ddf = ddf.set_index(ddf.timestamp)
ddf.repartition(freq='MS')

ddf.groupby('name').resample('H')['num'].mean()

当我运行上面的代码时,我得到了这个错误:

AttributeError: 'Column not found: resample'

这让我真的很难过,任何帮助都将不胜感激。

标签: dask

解决方案


看起来 dask 数据框没有实现 groupby-resample 操作。听起来您有功能请求。我建议在https://github.com/dask/dask/issues/new提出问题

有关在何处寻求帮助的请求,请参阅https://docs.dask.org/en/latest/support.html#asking-for-help 。


推荐阅读