2016-11-15 22 views
0
for i in range(1, len(df)): 
    if df.loc[i]["identification"] == df.loc[i-1]["identification"] and df.loc[i]["date"] == df.loc[i-1]["date"]: 
     df.loc[i,"duplicate"] = 1 
    else: 
     df.loc[i,"duplicate"] = 0 

この単純なforループは、大きなサイズのデータ​​フレームを処理するときに非常に遅くなります。Pandasデータフレームを使用する場合、slow for():ループを避けるにはどうすればよいですか?

提案がありますか?

+1

「スロー」と「ビッグサイズ」の詳細をご記入ください。 – Danra

答えて

2

ではなく、ループのベクトル化されたアプローチを使用してみてください:

df['duplicate'] = np.where((df.identification == df.identification.shift()) 
          & 
          (df.date == df.date.shift()), 
          1,0) 
+0

偉大な、これは本当に私が望んだ、実行時間の巨大な改善、ありがとう。 –

0

値が重複している場合は、ちょうどチェックしているように見えます。その場合、使用することができます

df.sort_values(by=['identification', 'date'], inplace=True) 
df['duplicate'] = df.duplicated(subset=['identification', 'date']).astype(int) 
+0

ソートはすでに完了していますが、あなたの提案もうまくいきます。ありがとうございます。 –

関連する問題