如何用pandas选择重复的行?

Fed*_*ile 5 python subtraction divide dataframe pandas

我有这样的数据帧:

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

我的目标是将2个数据帧中的行分开:

  • df1 =包含不沿列重复值的所有行B(unque rows).
  • 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
Run Code Online (Sandbox Code Playgroud)

注意:

  • 数据帧通常非常大,并且有许多值在B列中重复,因此答案应尽可能通用
    • 如果没有重复项,df2应为空!所有结果都应该在df1中

jez*_*ael 17

您可以使用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
Run Code Online (Sandbox Code Playgroud)