如何有效地将两个时间序列组合成备用?

时间:2013-01-16 14:07:34

标签: python pandas time-series

假设我有两个很长系列 - 大小

index = pd.date_range(start='1952', periods=10**6, freq='s')
big = pd.Series(np.ones(len(index))*97, index)
small = pd.Series(np.ones(len(index))*2, index)

我想要实现的是创建一个新系列,它结合bigsmall,在它们的值之间交替,使用borders来确定何时切换到另一个(例如每隔5秒有一个边框)

borders = pd.date_range(start='1952', periods=len(index)/5.0, freq='5s')

是否有可用于实现此目的的基于矩阵的高效操作组合?我试着查看docs中的各种连接,合并等运算符,但找不到提供类似逻辑的任何内容。

我可以使用for循环来实现这一点,但即使对于一系列len() 105

,也会持续一分钟
alternating = pd.Series()
for i in range(1, 100, 2):
    b0 = borders[i-1]
    b1 = borders[i]
    b2 = borders[i+1]
    sec = pd.offsets.Second(1)
    alternating = alternating.append(small[b0:b1-sec]).append(big[b1:b2-sec])

alternating.head(24)

的示例输出
1952-01-16 00:00:00     2
1952-01-16 00:00:01     2
1952-01-16 00:00:02     2
1952-01-16 00:00:03     2
1952-01-16 00:00:04     2
1952-01-16 00:00:05    97
1952-01-16 00:00:06    97
1952-01-16 00:00:07    97
1952-01-16 00:00:08    97
1952-01-16 00:00:09    97
1952-01-16 00:00:10     2
1952-01-16 00:00:11     2
1952-01-16 00:00:12     2
1952-01-16 00:00:13     2
1952-01-16 00:00:14     2
1952-01-16 00:00:15    97
1952-01-16 00:00:16    97
1952-01-16 00:00:17    97
1952-01-16 00:00:18    97
1952-01-16 00:00:19    97
1952-01-16 00:00:20     2
1952-01-16 00:00:21     2
1952-01-16 00:00:22     2
1952-01-16 00:00:23     2

1 个答案:

答案 0 :(得分:2)

如果你的时间只是一分钟,你可以试试这样的事情:

index = pd.date_range(start='1952', periods=10**6, freq='s')
big = pd.Series(np.ones(len(index))*97, index)
small = pd.Series(np.ones(len(index))*2, index)

alternating = big[big.index.second % 10 >= 5].combine_first(small)

alternating完全按照您的要求查看,并在150毫秒内计算。