【发布时间】:2017-11-01 12:24:28
【问题描述】:
我有一组文件。每个文件有 1 秒的数据。此外,这些文件不是定期的,即它们不是每日文件。例如,一个文件可能包含一天半的数据,而下一个文件可能包含 3 天 2 小时;文件之间和文件内部可能存在间隙。另一个问题是同时加载内存中的所有文件是不切实际的。
这是一个显示问题的具体示例。以下数据框有一天半 1 秒的数据:
index = pd.date_range('now', periods=60*60*24*1.5, freq='1S')
data_a = pd.DataFrame(np.random.rand(len(index)), index=index, columns=['data'])
下一个数据帧从前一个数据帧停止的地方开始,它有两天的数据:
index = pd.date_range(data_a.index[-1] + pd.Timedelta('1S'), periods=60*60*24*2, freq='1S')
data_b = pd.DataFrame(np.random.rand(len(index)), index=index, columns=['data'])
让我们在每个数据帧上创建 10 分钟的迭代器并 chain 它们:
ia = iter(data_a.groupby(TimeGrouper('10Min')))
ib = iter(data_b.groupby(TimeGrouper('10Min')))
iaib = chain(ia, ib)
如果我们迭代 iaib,我们期望的行为是只查看每个组键(及其数据)一次,但事实并非如此。
seen = {}
for name, group in iaib:
count = seen.get(name, 0)
seen[name] = count + 1
seen_twice = {key: value for key, value in seen.items() if value > 1}
seen_twice的内容是:
{Timestamp('2017-06-02 08:50:00', freq='10T'): 2}
在本例中,2017-06-02 08:50:00 是最后一组 data_a 和第一组 data_b 的键。
如何以 10 分钟为单位对所有文件进行迭代,而不在文件边缘重复组?
【问题讨论】:
-
感谢您的反馈,希望我已经改进了这个问题。
标签: python pandas time-series pandas-groupby