【发布时间】:2020-02-16 00:20:05
【问题描述】:
我有一个数据框 df,其中一些行相对于列的子集是重复的:
df
A B C D
1 Blue Green 4
2 Red Green 6
3 Red Green 2
4 Blue Pink 6
5 Blue Orange 9
6 Blue Orange 8
7 Blue Red 8
8 Red Orange 9
我想替换关于 B 和 C 的重复行的值,并将整行替换为“ERR”,理想情况下会产生:
A B C D
1 Blue Green 4
ERR ERR ERR ERR
ERR ERR ERR ERR
4 Blue Pink 6
ERR ERR ERR ERR
ERR ERR ERR ERR
7 Blue Red 8
8 Red Orange 9
简而言之:如果 B 列和 C 列存在重复行,则这些行中的所有值都应设置为“ERR”(不仅是重复的行)。
解决了! -> 感谢@anky_91
df = pd.DataFrame({"A": [1,2,3,4,5,6,7,8], "B": ['Blue', 'Red', 'Red', 'Blue', 'Blue', 'Blue', 'Blue', 'Red'], "C": ['Green', 'Green', 'Green', 'Pink', 'Orange', 'Orange', 'Red', 'Orange'], "D": [4,6,2,6,9,8,8,9]})
df = df.mask(df.duplicated(['B','C'], keep=False), 'ERR')
print(df)
【问题讨论】:
-
df.mask(df.duplicated(['B','C'],keep=False),'ERR')? -
就是这样!我会把它添加到帖子中。
-
'ERR'是什么意思?NaN或None是否更合适? -
好吧,我想跟踪数据框中的“错误”(如果两行的每一列都有相同的值,那没问题,我只是删除其中一个,但是如果,两行在 B 和 C 中具有相同的配对值,但其他列中的值不同,那么这被视为我想要跟踪的数据框中的错误)。我正在使用数据库,我已经在使用 np.NaN 来解决数据库中的空白,'error' 和 'gap' 我的数据库之间需要有区别;-)
标签: python pandas duplicates