高效的数据结构能够在Pandas中保持按时间键入类似字典的观察结果吗?

时间:2018-01-22 22:50:04

标签: python pandas dictionary data-structures time-series

我有一个与日期时间相关的观察列表,可以用字典或对象表示,如下所示:

Datetime         | Data
--------------------------------------------------------
2018-01-20 20:00 | {'word1': 3, 'word2': 5, 'wordX': 1}
2018-01-20 20:01 | {'word1': 2, 'word2': 2, 'wordX': 5}
2018-01-20 20:05 | {'word3': 2, 'word6': 1, 'word1': 1}

观察量可以是数百万。我认为,我的主要问题是 Data对象中的键数量变化

我希望能够通过计算分配给这些区间的特定单词的权重总和来按不同的时间间隔(例如,每10分钟,每10小时等)汇总加权单词。

我想为此使用Pandas,但由于我的日期键不是均匀间隔而且可能是非单一的,因此我无法选择哪种数据结构。

我的第一个想法是保留一个单独的字典对象字典,由UUID键入,并让Pandas时间序列保存日期时间到那些UUID的映射。这样,我可以获取UUID的每个间隔桶,然后使用我的自定义聚合手动迭代它们。这听起来像是一个坏主意吗?我非常感谢你朝着正确的方向迈进。

1 个答案:

答案 0 :(得分:2)

Datetime列转换为datetime,如果尚未:

df.Datetime = pd.to_datetime(df.Datetime)

由于你有一个计数字典,你可以将每一个转换为一个Counter对象,因为它们支持__add__ ition并且可以很好地重新采样。

Datetime设置为索引,重新取样,然后找到总和。

from collections import Counter
r = df.set_index('Datetime').Data.apply(Counter).resample('10min').sum()

print(r)

2018-01-20 20:00:00    {'word1': 6, 'word2': 7, 'wordX': 6, 'word3': ...
Freq: 10T, Name: Data, dtype: object

给定的示例每10分钟重新采样一次数据。这仅仅取决于数据的性质,将计数作为值。如果不是,你需要编写自己的循环并完成它。