我有一个包含大约 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
连续,但有多个版本 X
在C
,预计会出现以下情况。
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.duplicated
在 A 和 B
列上创建一个 bool 掩码 m1
,对应于 A
和 B
列中的值的条件不重复,则使用Series.str.contains
+ Series.duplicated
在 C
列上创建一个 bool 掩码,对应于 C
包含字符串 X
且 C
不重复的条件。最后使用这些掩码过滤 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/