パンダを使用して、あるDataFrameから別のDataFrameに列をコピーする最速の方法は?

user1204369

データのコア(データベースなど)を格納するために使用している大きなDataFrame(million +)レコードがあり、次に、それぞれの列のいくつかを組み合わせている小さなDataFrame(1〜2000)レコードがあります。私のプログラムのタイムステップは、数千のタイムステップになる可能性があります。両方のDataFrameは、id列によって同じ方法でインデックス付けされます。

私が使用しているコードは次のとおりです。

df_large.loc[new_ids, core_cols] = df_small.loc[new_ids, core_cols]

ここで、core_colsは私が対処している約10個のフィールドのリストであり、new_idsは小さなDataFrameからのIDです。このコードは正常に機能しますが、私のコードの中で最も遅い部分であり、マグニチュードは3です。2つのDataFrameのデータをマージするためのより高速な方法かどうかを知りたかっただけです。

マージ機能を使用して毎回データをマージしようとしましたが、プロセスに時間がかかったため、速度を向上させるために更新するより大きなDataFrameを作成しました。

ジェフ

.locアライン可能なフレームで設定するために使用することについて本質的に遅いことは何もありませんが、それは多くの場合をカバーするために少しのコードを通過するので、おそらくタイトなループで持つことは理想的ではありません。参考までに、この例は2番目の例とは少し異なります。

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: from pandas import DataFrame

In [4]: df = DataFrame(1.,index=list('abcdefghij'),columns=[0,1,2])

In [5]: df
Out[5]: 
   0  1  2
a  1  1  1
b  1  1  1
c  1  1  1
d  1  1  1
e  1  1  1
f  1  1  1
g  1  1  1
h  1  1  1
i  1  1  1
j  1  1  1

[10 rows x 3 columns]

In [6]: df2 = DataFrame(0,index=list('afg'),columns=[1,2])

In [7]: df2
Out[7]: 
   1  2
a  0  0
f  0  0
g  0  0

[3 rows x 2 columns]

In [8]: df.loc[df2.index,df2.columns] = df2

In [9]: df
Out[9]: 
   0  1  2
a  1  0  0
b  1  1  1
c  1  1  1
d  1  1  1
e  1  1  1
f  1  0  0
g  1  0  0
h  1  1  1
i  1  1  1
j  1  1  1

[10 rows x 3 columns]

これが代替案です。データパターンに適合する場合と適合しない場合があります。更新(小さなフレーム)がほとんど独立している場合、これは機能します(つまり、大きなフレームを更新せず、新しいサブフレームを選択してから更新するなどです。これがパターンの場合、使用.locは約正しい)。

大きなフレームを更新する代わりに、大きなフレームの列で小さなフレームを更新します。例:

In [10]: df = DataFrame(1.,index=list('abcdefghij'),columns=[0,1,2])

In [11]: df2 = DataFrame(0,index=list('afg'),columns=[1,2])

In [12]: needed_columns = df.columns-df2.columns

In [13]: df2[needed_columns] = df.reindex(index=df2.index,columns=needed_columns)

In [14]: df2
Out[14]: 
   1  2  0
a  0  0  1
f  0  0  1
g  0  0  1

[3 rows x 3 columns]

In [15]: df3 = DataFrame(0,index=list('cji'),columns=[1,2])

In [16]: needed_columns = df.columns-df3.columns

In [17]: df3[needed_columns] = df.reindex(index=df3.index,columns=needed_columns)

In [18]: df3
Out[18]: 
   1  2  0
c  0  0  1
j  0  0  1
i  0  0  1

[3 rows x 3 columns]

そして、必要に応じてすべてを連結します(その間、リストに保持されるか、以下の私のコメントを参照してください。これらのサブフレームは、作成時に外部ストレージに移動し、この連結手順の前に読み戻すことができます)。

In [19]: pd.concat([ df.reindex(index=df.index-df2.index-df3.index), df2, df3]).reindex_like(df)
Out[19]: 
   0  1  2
a  1  0  0
b  1  1  1
c  1  0  0
d  1  1  1
e  1  1  1
f  1  0  0
g  1  0  0
h  1  1  1
i  1  0  0
j  1  0  0

[10 rows x 3 columns]

このパターンの利点は、実際のデータベース(またははるかに優れたHDFStore)を使用して「データベース」を実際に保存し、必要に応じてサブフレームを作成/更新し、終了時に新しいストアに書き出すように簡単に拡張できることです。

私はいつもこのパターンを使用していますが、実際にはパネルを使用しています。

  • データのサブセットに対して計算を実行し、それぞれを個別のファイルに書き込みます
  • 次に、最後にそれらをすべて読み取り、(メモリ内で)連結し、巨大な新しいファイルを書き出します。concatステップは、メモリ内で一度に実行できます。または、本当に大きなタスクの場合は、繰り返し実行できます。

マルチプロセスを使用して計算を実行し、個々のパネルをすべて完全に独立しているため、個別のファイルに書き込むことができます。唯一の依存部分は連結です。

これは本質的にmap-reduceパターンです。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

パンダを使用して、ある列から別の列に値をコピーします

分類Dev

パンダが特定の列をあるdfから別のdfにコピーして貼り付ける方法

分類Dev

laravelを使用してあるテーブルから別のテーブルにコピーする方法は?

分類Dev

Angular2を使用してFCMを使用してあるコンピューターから別のコンピューターに通知を送信する方法

分類Dev

PyTorchであるテンソルから別のテンソルに値をコピーする最速の方法は何ですか?

分類Dev

R data.tableを使用して、ある行と列(「セル」)から別の行と列に値をコピー(「繰り越し」)する方法は?

分類Dev

条件が満たされた場合、パンダはある列から別の列に値をコピーします

分類Dev

PowerShellを使用して新しいファイルのみをあるフォルダーから別のフォルダーにコピーする方法

分類Dev

別の列のフィルターに基づいてパンダDataFrameからテキストを抽出する

分類Dev

別のpandas.DataFrameからのデータを使用してpandas.DataFrameの列を埋める方法は?

分類Dev

パンダを使用して、ある列から別の列に値を置き換えますか?

分類Dev

Pythonを使用してzipファイルをあるフォルダーから別のフォルダーにコピーする方法

分類Dev

別のDataFrameを使用してPythonでDataFrameからレコードを削除する

分類Dev

パンダ/ナンピー:はしごを作成する最速の方法は?

分類Dev

パンダを使用しているときにグループに列を追加する別の方法はありますか?

分類Dev

列を1つのDataFrameから別のDataFrameにコピーすると、NaN値が得られますか?

分類Dev

35GBのredisをあるインスタンスから別のインスタンスにコピーする最速の方法(Azure標準)

分類Dev

私がシリーズを期待しているとき、パンダのDataFrame列は別のDataFrameです

分類Dev

copyコマンドを使用してpostgresのあるテーブルから別のテーブルにデータをコピーする方法

分類Dev

パンダ:別のDataFrameに表示されている列のある行を削除します

分類Dev

大きなパンダのDataFrameをS3に保存する最速の方法は何ですか?

分類Dev

typedarrayをjavascriptの配列にコピーする最速の方法は?

分類Dev

パンダは、他の列の値に基づいて、あるdfを別のdfから更新します

分類Dev

他のパンダデータフレームからの一致する列に基づいてパンダ列を更新する最速の方法

分類Dev

Androidのあるアダプターから別のアダプターにインテントを使用して値を渡す方法はありますか?

分類Dev

あるマシンでphantomJをコンパイルしてから、別のマシンに「移植」する方法は?

分類Dev

あるマシンでphantomJをコンパイルしてから、別のマシンに「移植」する方法は?

分類Dev

ある列から別のSQLに値をコピーする

分類Dev

Pythonを使用して1つのレイヤーから別のレイヤーにフィルターをコピーする方法はありますか

Related 関連記事

  1. 1

    パンダを使用して、ある列から別の列に値をコピーします

  2. 2

    パンダが特定の列をあるdfから別のdfにコピーして貼り付ける方法

  3. 3

    laravelを使用してあるテーブルから別のテーブルにコピーする方法は?

  4. 4

    Angular2を使用してFCMを使用してあるコンピューターから別のコンピューターに通知を送信する方法

  5. 5

    PyTorchであるテンソルから別のテンソルに値をコピーする最速の方法は何ですか?

  6. 6

    R data.tableを使用して、ある行と列(「セル」)から別の行と列に値をコピー(「繰り越し」)する方法は?

  7. 7

    条件が満たされた場合、パンダはある列から別の列に値をコピーします

  8. 8

    PowerShellを使用して新しいファイルのみをあるフォルダーから別のフォルダーにコピーする方法

  9. 9

    別の列のフィルターに基づいてパンダDataFrameからテキストを抽出する

  10. 10

    別のpandas.DataFrameからのデータを使用してpandas.DataFrameの列を埋める方法は?

  11. 11

    パンダを使用して、ある列から別の列に値を置き換えますか?

  12. 12

    Pythonを使用してzipファイルをあるフォルダーから別のフォルダーにコピーする方法

  13. 13

    別のDataFrameを使用してPythonでDataFrameからレコードを削除する

  14. 14

    パンダ/ナンピー:はしごを作成する最速の方法は?

  15. 15

    パンダを使用しているときにグループに列を追加する別の方法はありますか?

  16. 16

    列を1つのDataFrameから別のDataFrameにコピーすると、NaN値が得られますか?

  17. 17

    35GBのredisをあるインスタンスから別のインスタンスにコピーする最速の方法(Azure標準)

  18. 18

    私がシリーズを期待しているとき、パンダのDataFrame列は別のDataFrameです

  19. 19

    copyコマンドを使用してpostgresのあるテーブルから別のテーブルにデータをコピーする方法

  20. 20

    パンダ:別のDataFrameに表示されている列のある行を削除します

  21. 21

    大きなパンダのDataFrameをS3に保存する最速の方法は何ですか?

  22. 22

    typedarrayをjavascriptの配列にコピーする最速の方法は?

  23. 23

    パンダは、他の列の値に基づいて、あるdfを別のdfから更新します

  24. 24

    他のパンダデータフレームからの一致する列に基づいてパンダ列を更新する最速の方法

  25. 25

    Androidのあるアダプターから別のアダプターにインテントを使用して値を渡す方法はありますか?

  26. 26

    あるマシンでphantomJをコンパイルしてから、別のマシンに「移植」する方法は?

  27. 27

    あるマシンでphantomJをコンパイルしてから、別のマシンに「移植」する方法は?

  28. 28

    ある列から別のSQLに値をコピーする

  29. 29

    Pythonを使用して1つのレイヤーから別のレイヤーにフィルターをコピーする方法はありますか

ホットタグ

アーカイブ