前の行を参照しながらパンダのデータフレームを反復処理するにはどうすればよいですか?

からくみ

Pythonデータフレームを繰り返し処理しているところ、非常に遅いことがわかりました。パンダではすべてをベクトル化しようとしていることを理解していますが、この場合は特に反復する必要があります(または、ベクトル化が可能な場合は、その方法がわかりません)。

ロジックは単純です。2つの列「A」と「B」と結果列「signal」があります。Aが1の場合は、信号を1に設定します。Bが1の場合は、信号を0に設定します。それ以外の場合、信号は以前の信号になります。言い換えると、列Aは「オン」信号、列Bは「オフ」信号、「信号」は状態を表します。

これが私のコードです:

def signals(indata):
    numrows = len(indata)
    data = pd.DataFrame(index= range(0,numrows))
    data['A'] = indata['A']
    data['B'] = indata['B']
    data['signal'] = 0


    for i in range(1,numrows):
        if data['A'].iloc[i] == 1:
            data['signal'].iloc[i] = 1
        elif data['B'].iloc[i] == 1:
            data['signal'].iloc[i] = 0
        else:
            data['signal'].iloc[i] = data['signal'].iloc[i-1]
    return data

入力/出力の例:

indata = pd.DataFrame(index = range(0,10))
indata['A'] = [0, 1, 0, 0, 0, 0, 1, 0, 0, 0]
indata['B'] = [1, 0, 0, 0, 1, 0, 0, 0, 1, 1]

signals(indata)

出力:

    A   B   signal
0   0   1   0
1   1   0   1
2   0   0   1
3   0   0   1
4   0   1   0
5   0   0   0
6   1   0   1
7   0   0   1
8   0   1   0
9   0   1   0

この単純なロジックは、ランダムに生成されたデータを含む2000行のデータフレームで実行するのに46秒かかります。

からくみ

私の問題に対する最も簡単な答えは、データフレームを反復処理している間はデータフレームに書き込まないことでした。numpyでゼロの配列を作成してから、その配列で反復ロジックを実行しました。次に、データフレームの列に配列を書き込みました。

def signals3(indata):
    numrows = len(indata)
    data = pd.DataFrame(index= range(0,numrows))

    data['A'] = indata['A'] 
    data['B'] = indata['B']
    out_signal = np.zeros(numrows)

    for i in range(1,numrows):
        if data['A'].iloc[i] == 1:
            out_signal[i] = 1
        elif data['B'].iloc[i] == 1:
            out_signal[i] = 0
        else:
            out_signal[i] = out_signal[i-1]


    data['signal'] = out_signal

    return data

2000行のランダムデータのデータフレームでは、これは46秒(約1,000倍高速)ではなく43ミリ秒しかかかりません。

また、データフレーム列AとBをシリーズに割り当ててから、シリーズを反復処理するバリアントも試しました。これは少し速かった(27ミリ秒)。しかし、速度のほとんどはデータフレームへの書き込みにあるようです。

コールドスピードとdjkの両方の答えは私の解決策(約4.5ms)よりも速かったが、実際には、それが最適ではない場合でも、おそらくシリーズを繰り返すだけだろう。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パンダのデータフレームを反復処理しながら、プログレスバーを表示するにはどうすればよいですか?

分類Dev

2つのデータフレームを反復処理してデータを比較し、処理を行うにはどうすればよいですか?

分類Dev

データフレームパンダを反復処理するときに列名を取得するにはどうすればよいですか?

分類Dev

名前のリストを反復処理するデータフレームを作成するにはどうすればよいですか?

分類Dev

複数の値を反復処理して新しいデータフレームを動的に作成するにはどうすればよいですか?

分類Dev

パンダのデータフレームのグループを反復処理し、階層条件を適用する関数を作成するにはどうすればよいですか?

分類Dev

サイズの異なる2つのデータフレームを反復処理するにはどうすればよいですか?

分類Dev

パンダのデータフレームを反復処理し、3番目の列に基づいて特定の列を比較するにはどうすればよいですか?

分類Dev

反復を使用してマルチレベルのパンダデータフレームに追加するにはどうすればよいですか?

分類Dev

データフレーム列を反復処理しながら、複数の個別のリストを生成するにはどうすればよいですか?

分類Dev

複数の列のデータフレーム内の個々の列の値を反復処理するにはどうすればよいですか?

分類Dev

pandasデータフレーム内のグループを反復処理し、各グループを操作してから、元のデータフレームに値を割り当てるにはどうすればよいですか?

分類Dev

ディクショナリの値を反復処理し、これらを行として対応するデータフレームに追加するにはどうすればよいですか?

分類Dev

pandas データフレーム データの 2 列を反復処理するにはどうすればよいですか?

分類Dev

要素を計算しながら、パンダのデータフレームに新しい列を追加するにはどうすればよいですか?

分類Dev

パンダでforループの反復内に複数のデータフレームを作成するにはどうすればよいですか?

分類Dev

同じインデックスを持つ最初のデータフレームから行を削除しながら、パンダのデータフレームをマージするにはどうすればよいですか?

分類Dev

パンダのピボットテーブルを反復処理するにはどうすればよいですか?(マルチインデックスデータフレーム?)

分類Dev

Pythonパンダはiterrowsを使用してデータフレーム行を反復処理するのが遅いのですが、どういうわけか置き換えることができますか?

分類Dev

forループで上記の列の合計式を使用しながら、行を反復処理するにはどうすればよいですか?

分類Dev

ファイル内の行を反復処理しながらファイルから行を削除するにはどうすればよいですか?

分類Dev

パンダデータフレームの重複フィールドを処理するにはどうすればよいですか?

分類Dev

Pythonでパンダのデータフレームを別のデータフレームで参照するにはどうすればよいですか?

分類Dev

PILを使用して、パンダデータフレームの行の値から画像を作成するにはどうすればよいですか?

分類Dev

PILを使用して、パンダデータフレームの行の値から画像を作成するにはどうすればよいですか?

分類Dev

Angular 4でヘッダーやフッターなどの反復的なHTMLコードを処理するにはどうすればよいですか?

分類Dev

パンダのデータフレームで列の値が重複している行を削除するにはどうすればよいですか?

分類Dev

データフレームを反復処理しているときに、新しく見つかった値を同じインデックスの新しい列に配置するにはどうすればよいですか?

分類Dev

データフレーム内の列の値を反復処理し、平均を取り、新しいデータフレームを作成するにはどうすればよいですか?

Related 関連記事

  1. 1

    パンダのデータフレームを反復処理しながら、プログレスバーを表示するにはどうすればよいですか?

  2. 2

    2つのデータフレームを反復処理してデータを比較し、処理を行うにはどうすればよいですか?

  3. 3

    データフレームパンダを反復処理するときに列名を取得するにはどうすればよいですか?

  4. 4

    名前のリストを反復処理するデータフレームを作成するにはどうすればよいですか?

  5. 5

    複数の値を反復処理して新しいデータフレームを動的に作成するにはどうすればよいですか?

  6. 6

    パンダのデータフレームのグループを反復処理し、階層条件を適用する関数を作成するにはどうすればよいですか?

  7. 7

    サイズの異なる2つのデータフレームを反復処理するにはどうすればよいですか?

  8. 8

    パンダのデータフレームを反復処理し、3番目の列に基づいて特定の列を比較するにはどうすればよいですか?

  9. 9

    反復を使用してマルチレベルのパンダデータフレームに追加するにはどうすればよいですか?

  10. 10

    データフレーム列を反復処理しながら、複数の個別のリストを生成するにはどうすればよいですか?

  11. 11

    複数の列のデータフレーム内の個々の列の値を反復処理するにはどうすればよいですか?

  12. 12

    pandasデータフレーム内のグループを反復処理し、各グループを操作してから、元のデータフレームに値を割り当てるにはどうすればよいですか?

  13. 13

    ディクショナリの値を反復処理し、これらを行として対応するデータフレームに追加するにはどうすればよいですか?

  14. 14

    pandas データフレーム データの 2 列を反復処理するにはどうすればよいですか?

  15. 15

    要素を計算しながら、パンダのデータフレームに新しい列を追加するにはどうすればよいですか?

  16. 16

    パンダでforループの反復内に複数のデータフレームを作成するにはどうすればよいですか?

  17. 17

    同じインデックスを持つ最初のデータフレームから行を削除しながら、パンダのデータフレームをマージするにはどうすればよいですか?

  18. 18

    パンダのピボットテーブルを反復処理するにはどうすればよいですか?(マルチインデックスデータフレーム?)

  19. 19

    Pythonパンダはiterrowsを使用してデータフレーム行を反復処理するのが遅いのですが、どういうわけか置き換えることができますか?

  20. 20

    forループで上記の列の合計式を使用しながら、行を反復処理するにはどうすればよいですか?

  21. 21

    ファイル内の行を反復処理しながらファイルから行を削除するにはどうすればよいですか?

  22. 22

    パンダデータフレームの重複フィールドを処理するにはどうすればよいですか?

  23. 23

    Pythonでパンダのデータフレームを別のデータフレームで参照するにはどうすればよいですか?

  24. 24

    PILを使用して、パンダデータフレームの行の値から画像を作成するにはどうすればよいですか?

  25. 25

    PILを使用して、パンダデータフレームの行の値から画像を作成するにはどうすればよいですか?

  26. 26

    Angular 4でヘッダーやフッターなどの反復的なHTMLコードを処理するにはどうすればよいですか?

  27. 27

    パンダのデータフレームで列の値が重複している行を削除するにはどうすればよいですか?

  28. 28

    データフレームを反復処理しているときに、新しく見つかった値を同じインデックスの新しい列に配置するにはどうすればよいですか?

  29. 29

    データフレーム内の列の値を反復処理し、平均を取り、新しいデータフレームを作成するにはどうすればよいですか?

ホットタグ

アーカイブ