web-dev-qa-db-ja.com

パンダと重複する行を選択するにはどうすればよいですか?

私はこのようなデータフレームを持っています:

import pandas as pd
dic = {'A':[100,200,250,300],
       'B':['ci','ci','po','pa'],
       'C':['s','t','p','w']}
df = pd.DataFrame(dic)

私の目標は、2つのデータフレームで行を分離することです。

  • df1 =列B(一意の行)に沿って値を繰り返さないすべての行が含まれます。
  • df2 =テーマ自体を繰り返す行のみが含まれます。

結果は次のようになります。

df1 =      A  B C         df2 =     A  B C
      0  250 po p               0  100 ci s 
      1  300 pa w               1  250 ci t

注意:

  • データフレームは一般に非常に大きく、列Bで繰り返される値が多数ある可能性があるため、回答は可能な限り一般的なものにする必要があります[.____]。
    • 重複がない場合、df2は空である必要があります。すべての結果はdf1にあるはずです
6

Series.duplicated パラメータkeep=Falseすべての重複のマスクを作成してから boolean indexing~maskを反転するには:

mask = df.B.duplicated(keep=False)
print (mask)
0     True
1     True
2    False
3    False
Name: B, dtype: bool

print (df[mask])
     A   B  C
0  100  ci  s
1  200  ci  t

print (df[~mask])
     A   B  C
2  250  po  p
3  300  pa  w
18
jezrael