Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否按复合条件在dataframe中查找重复项?_Python_Pandas_Duplicates - Fatal编程技术网

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内部使用

  • 首先
    drop_duplicates
    以除去col2和col2的重复记录 可乐

  • 使用
    duplicated
    keep=False
    为具有 重复“col2”

  • 最后,对lambda使用
    loc
    ,以布尔方式仅选择那些True 索引


谢谢!
keep=
arg中的False是否重复?另外,如何在
col3
string中转义连字符?从文档中,
duplicated(False);将所有重复项标记为True
,这意味着它使它们成为布尔值,允许过滤。不确定您所说的是哪一个连字符。请解释一下啊,是的。如果
col3
是string
col-3
那么如何在
中转义连字符。删除重复项…
access
df['col\u name']。如果我明白了,删除重复项应该可以。如果不是的话,一个班轮不适合我。由于col3名称中的非字母数字字符,我需要将其拆分为链接命令,因此我无法像您那样访问它。
   col1  col2  col3
0     1     3   bob
3     4     3  rose