こんにちは、
私は2つのテーブル(AとB)を作成するためにdataframeを使用しています。 (1番目の列は「ID」で、1つの表に同じIDの行が複数ある可能性があります)pandas(dataframe)select data
Aに基づいて新しい表(C)を作成し、Bからいくつかの行を作成したいとします。 表のID Bはまた、その後C.
にこの行を追加で発生マイコード:
from pandas import DataFrame
A_ID = [1,2,3,1,2]
A_place = [1,2,3,2,1]
B_ID = [4,2,6]
B_place = [2,2,3]
A_data = {'ID':A_ID,'place':A_place}
A_table = DataFrame(A_data)
B_data = {'ID':B_ID,'place':B_place}
B_table = DataFrame(B_data)
C_table = A_table
for n in range(len(B_table)):
if B_table['ID'][n] in list(A_table['ID']):
C_table = C_table.append(B_table[n:n+1])
質問:
私の質問それはforループを使用せずにそれを行うには、他の方法がありますか? 私は数百万のデータを処理し、ループの廃棄には多くの時間をかけます。
ところで、大きなデータを扱うためにパンダよりも優れたツールはありますか?
ありがとうございました!
C_table = pd.concat([C_table, B_table[B_table['ID'].isin(A_table['ID'])]])
だから、まず、内側の文:IDがあるB_table
で
B_table[B_table['ID'].isin(A_table['ID'])]
フィルタアウト行をあなたはそれだけで行うによりパフォーマンスになりますやっていることを見てみると
'C_table = B_table [B_table ['ID']のようにフィルタリングするだけです。isin(A_table ['ID'])] ' – EdChum
これは動作します!!私は私の要求を満たすために少し変更を加えます: 'C_table = A_table.append(B_table [B ID]]。isin(A_table ['ID'])))' ループ? –
ああええ。ループよりも速くなければなりません。 –