我有一个这样的数据框
id col1
2 T
2 T
4 R
4 T
6 G
6 G
我想用这种方式进行重复数据删除:
如果我的T和T具有相同的ID,我想保留2行
如果我的G或R和G或R具有相同的ID,我想保留2行
如果我在同一IT上有T和(G或R),我只想保持T行(删除两行之一)
我想要这个结果:)
id col1
2 T
2 T
4 T
6 G
6 G
谢谢:)
答案 0 :(得分:0)
使用boolean indexing
进行过滤:
m1 = df['col1'].eq('T')
m2 = m1.groupby(df['id']).transform('sum').ne(1)
df = df[m1 | m2 ]
print (df)
id col1
0 2 T
1 2 T
3 4 T
4 6 G
5 6 G
说明:
将col1
的{{1}}与eq
(T
)比较:
==
用m1 = df['col1'].eq('T')
print (m1)
0 True
1 True
2 False
3 True
4 False
5 False
Name: col1, dtype: bool
用transform
每组计算True
个值:
sum
比较不等于ne
(print (m1.groupby(df['id']).transform('sum'))
0 2.0
1 2.0
2 1.0
3 1.0
4 0.0
5 0.0
Name: col1, dtype: float64
):
!=
并通过m2 = m1.groupby(df['id']).transform('sum').ne(1)
print (m2)
0 True
1 True
2 False
3 False
4 True
5 True
Name: col1, dtype: bool
链接在一起以进行按位OR:
|