【问题标题】:Replace the values of all duplicate rows in Python Pandas替换 Python Pandas 中所有重复行的值
【发布时间】: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' 是什么意思? NaNNone 是否更合适?
  • 好吧,我想跟踪数据框中的“错误”(如果两行的每一列都有相同的值,那没问题,我只是删除其中一个,但是如果,两行在 B 和 C 中具有相同的配对值,但其他列中的值不同,那么这被视为我想要跟踪的数据框中的错误)。我正在使用数据库,我已经在使用 np.NaN 来解决数据库中的空白,'error' 和 'gap' 我的数据库之间需要有区别;-)

标签: python pandas duplicates


【解决方案1】:

您可以在此处使用df.maskdf.duplicated

df.mask(df.duplicated(['B','C'],keep=False),'ERR')

     A     B       C    D
0    1  Blue   Green    4
1  ERR   ERR     ERR  ERR
2  ERR   ERR     ERR  ERR
3    4  Blue    Pink    6
4  ERR   ERR     ERR  ERR
5  ERR   ERR     ERR  ERR
6    7  Blue     Red    8
7    8   Red  Orange    9

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 2018-02-26
    • 2021-09-05
    • 2021-03-08
    • 2022-07-06
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多