困っていること
手持ちのデータフレームにおいて、ある行のデータセットが他の行のデータセットと重複している場合が散見され、かつデータ数も2000行以上と、かなり多い状況にあります。
今、私が実現したいことは、
たとえば、
10行目が 100行目,200行目,300行目と重複している
20行目が 700行目,800行目,900行目と重複している
のであれば、以下のように返ってくることを期待しています。
[[10,[100,200,300],
[20,[700,800,900]]
上記のことを実現させるために、自分でもfor文で回して作ってみたのですが、データフレームの行数が2000行以上あるので、異常に時間がかかっており、for文以外のもっと効率的に期待した結果を返す方法を知りたく思っています。どなたかお分かりの方、ご教授いただければ幸いです。
私が書いたコード
ちなみに、以下のようなコードを書いたのですが、異常に時間がかかって困っています。何か効率的に重複する行番号を出力する良い方法があれば教えていただきたいです。
results=[] cnt=0 err=[] for i in list(df[df.duplicated(keep=False)].index): tmp=[] for k in list(df[df.duplicated(keep=False)].index): if i!=k: if k not in err: if list(df.iloc[i,:])==list(df.iloc[k,:]): tmp.append(k) err.append(k) cnt+=1 err.append(i) if len(tmp)>0: results.append([i,tmp])
回答2件
あなたの回答
tips
プレビュー