如何 select 使用 pandas 复制行?
How to select duplicate rows with 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)
我的目标是将行分隔为 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
您可以使用 Series.duplicated
with parameter keep=False
to create a mask for all duplicates and then 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
我有一个这样的数据框:
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
您可以使用 Series.duplicated
with parameter keep=False
to create a mask for all duplicates and then 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