python-3.x - Pandas 数据框使用列逻辑删除重复行

标签 python-3.x pandas dataframe

我有一个包含大约 1 亿行的 pandas 数据框。我对重复数据删除感兴趣,但有一些标准我无法找到相关文档。

我想对数据帧进行重复数据删除,忽略一列不同的列。如果该行是重复的,除了该列之外,我只想保留具有特定字符串的行,例如 X .

示例数据框:

import pandas as pd

df = pd.DataFrame(columns = ["A","B","C"],
                  data = [[1,2,"00X"],
                          [1,3,"010"],
                          [1,2,"002"]])

期望的输出:

>>> df_dedup

   A  B    C
0  1  2  00X
1  1  3  010

因此,换句话说,行索引 2 将被删除,因为行索引 0 在列 A 中包含信息。和B ,和X在专栏 C

由于此数据稍大,我希望尽可能避免迭代行。 Ignore Index是我发现的最接近内置的 drop_duplicates() .

如果没有X在专栏 C那么该行应该要求 C与去重相同。

在有匹配的A的情况下和B连续,但有多个版本 XC ,预计会出现以下情况。

df = pd.DataFrame(columns=["A","B","C"],
                  data = [[1,2,"0X0"],
                          [1,2,"X00"],
                          [1,2,"0X0"]])

输出应该是:

>>> df_dedup

   A  B    C
0  1  2  0X0
1  1  2  X00

最佳答案

使用DataFrame.duplicatedA 和 B 列上创建一个 bool 掩码 m1,对应于 AB 列中的值的条件不重复,则使用Series.str.contains + Series.duplicatedC 列上创建一个 bool 掩码,对应于 C 包含字符串 XC 不重复的条件。最后使用这些掩码过滤 df 中的行。

m1 = ~df[['A', 'B']].duplicated()
m2 = df['C'].str.contains('X') & ~df['C'].duplicated()
df = df[m1 | m2]

结果:

#1
   A  B    C
0  1  2  00X
1  1  3  010

#2
   A  B    C
0  1  2  0X0
1  1  2  X00

关于python-3.x - Pandas 数据框使用列逻辑删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63743909/

相关文章:

Python 3 - xlwt 保存工作簿错误

python - 数据帧上的 If/Elseif 条件与多个操作相结合

python - 循环遍历占位符来创建 pandas 系列

python - 如何根据字典有效地填充数据框的列

python - 有没有一种方法可以根据特定值过滤数据框,同时使用 Pandas 保留唯一标识符的所有其他值?

python - 脚本无法继续单击“加载更多”按钮

python - 声明后数据无效

python - pandas 中多列的唯一值

python - python中有没有一个函数可以保存多个不同名称的csv文件?

python-3.x - Python3 如何从 while 循环设置 DataFrame