大小の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)
私が達成したいのは、それらの値を交互に組み合わせbig
て、他の値に切り替えるタイミングを決定するために使用する新しいシリーズを作成することです(たとえば、5秒ごとに境界線があります)small
borders
borders = pd.date_range(start='1952', periods=len(index)/5.0, freq='5s')
これを達成するために使用できる効率的なマトリックスベースの操作コンボはありますか?ドキュメントでさまざまな結合、マージなどの演算子を調べてみましたが、同様のロジックを提供するものは見つかりませんでした。
len()
forループを使用してこれを実現できましたが、 10ˆ5のシリーズでも1分以上続きます
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