Python 是否按复合条件在dataframe中查找重复项?
我有一个数据框,其中包含如下数据:Python 是否按复合条件在dataframe中查找重复项?,python,pandas,duplicates,Python,Pandas,Duplicates,我有一个数据框,其中包含如下数据: col1 col2 col3 1 3 bob 2 1 alice 3 3 bob 4 3 rose 我要做的是保留col2的重复行,并丢弃col3值大于1的重复行。或者换句话说,是col2的副本,但仅限于col3的值不同的地方。所以在上面的例子中,我最终会得到: col1 col2 col3 1 3 bob 4
col1 col2 col3
1 3 bob
2 1 alice
3 3 bob
4 3 rose
我要做的是保留col2的重复行,并丢弃col3值大于1的重复行。或者换句话说,是col2的副本,但仅限于col3的值不同的地方。所以在上面的例子中,我最终会得到:
col1 col2 col3
1 3 bob
4 3 rose
Alice不会出现在输出中,因为显然col2的'1'没有第二个值——它不是重复的。Bob的第二个条目(33 Bob)不会在输出中,因为虽然col2的“3”是重复的,但col3的“Bob”已经在结果集中(13 Bob)。(我知道keep=
参数可以更改保留第一个或最后一个的行为,但为了简单起见忽略它。)
有什么想法吗?谢谢。使用
.duplicated()
、drop\u duplicates()
和loc
访问器的组合
df.loc[df[df['col2'].duplicated(False)].col3.drop_duplicates(keep='first').index,:]
col1 col2 col3
0 1 3 bob
3 4 3 rose
它的工作原理
#Filter all duplicated in col2 using duplicated(False)
df[df['col2'].duplicated(False)]
#Drop duplicates in col3 but retaining first using .drop_duplicates(keep='first')
df[df['col2'].duplicated(False)].col3.drop_duplicates(keep='first')
#Extract index
df[df['col2'].duplicated(False)].col3.drop_duplicates(keep='first').index
#Finally filter using loc accessor
df.loc[index,all columns]
尝试:
输出:
col1 col2 col3
0 1 3 bob
3 4 3 rose
详情:
在df.loc内部使用
- 首先
以除去col2和col2的重复记录 可乐drop_duplicates
- 使用
和duplicated
为具有 重复“col2”keep=False
- 最后,对lambda使用
,以布尔方式仅选择那些True 索引loc
keep=
arg中的False是否重复?另外,如何在col3
string中转义连字符?从文档中,duplicated(False);将所有重复项标记为True
,这意味着它使它们成为布尔值,允许过滤。不确定您所说的是哪一个连字符。请解释一下啊,是的。如果col3
是stringcol-3
那么如何在中转义连字符。删除重复项…
accessdf['col\u name']。如果我明白了,删除重复项应该可以。如果不是的话,一个班轮不适合我。由于col3名称中的非字母数字字符,我需要将其拆分为链接命令,因此我无法像您那样访问它。
col1 col2 col3
0 1 3 bob
3 4 3 rose