1

列「Time」と「A」を持つ pandas DataFrame があります。各行の df["Time"] は整数のタイムスタンプで、df["A"] は float です。df["A"] の値を持つ新しい列 "B" を作成したいのですが、これは将来 5 秒またはその直前に発生します。これを次のように繰り返し実行できます。

for i in df.index:
    df["B"][i] = df["A"][max(df[df["Time"] <= df["Time"][i]+5].index)]

ただし、df には数万のレコードがあるため、これには時間がかかりすぎます。また、これを数百回実行する必要があるため、私のソリューションは実際にはオプションではありません。私はパンダにやや慣れていないため(プログラミング全般にやや慣れていないだけです)、パンダでサポートされているこれに対する明らかな解決策があるかどうかはわかりません。

列の作成中に各行の df["Time"] の特定の値を参照する方法があれば役立つので、次のようなことができます。

df["B"] = df["A"][max(df[df["Time"] <= df["Time"][corresponding_row]+5].index)]

ありがとう。

編集:これが私の目標の例です。データフレームが次の場合:

Time A
0    0
1    1
4    2
7    3
8    4
10   5
12   6
15   7
18   8
20   9

次に、結果を次のようにしたいと思います。

Time A  B
0    0  2
1    1  2
4    2  4
7    3  6
8    4  6
10   5  7
12   6  7
15   7  9
18   8  9
20   9  9

ここで、B の各行は、Time が最大で 5 だけ大きい行の A の値から取得されます。したがって、Time もインデックスである場合、df["B"][0] = df["A"][4 ] 4 は 0 より大きい最大 5 である最大時間であるため。コードでは、4 = max(df["Time"][df["Time"] <= 0+5] であり、これが df["B の理由です。 "][0] は df["A"][4] です。

4

1 に答える 1