python - 替换数据框中的重复值

标签 python pandas dataframe replace duplicates

我有以下数据框:

import numpy as np
import pandas as pd

df = pd.DataFrame({'ID': [1, 1, 2, 5, 5, 6, 1, 1, 2, 2, 5, 9, 1, 2, 3, 3, 3, 5]})
print(df)

这给出:

    ID
0    1
1    1
2    2
3    5
4    5
5    6
6    1
7    1
8    2
9    2
10   5
11   9
12   1
13   2
14   3
15   3
16   3
17   5

我想用尚未使用的最低值替换“ID”列中的重复值。然而,连续的相同值应该被视为一个组,并且它们的值应该以相同的方式改变。例如:前两个值都是 1。它们是连续的,因此它们是一个组,因此第二个“1”不应替换为“2”。第 14-16 行是三个连续的三。值 3 已被用来替换上述值,因此需要替换这三个值。但它们是连续的,因此是一个组,并且应该获得相同的替换值。预期结果如下,将会更加清晰:

    ID
0    1
1    1
2    2
3    5
4    5
5    6
6    3
7    3
8    4
9    4
10   7
11   9
12   8
13  10
14  11
15  11
16  11
17  12

最佳答案

df = pd.DataFrame({'ID': [1, 1, 2, 5, 5, 6, 1, 1, 2, 2, 5, 9, 1, 2, 3, 3, 3, 5]})


def fun():
    v, dub = 1, set()
    d = yield
    while True:
        num = d.iloc[0]['ID']
        if num in dub:
            while v in dub:
                v += 1
            d.ID = num = v
        dub.add(num)
        d = yield d


f = fun()
next(f)

df = df.groupby([df['ID'].diff().ne(0).cumsum(), 'ID'], as_index=False).apply(lambda x: f.send(x))
print(df)

输出:

    ID
0    1
1    1
2    2
3    5
4    5
5    6
6    3
7    3
8    4
9    4
10   7
11   9
12   8
13  10
14  11
15  11
16  11
17  12

关于python - 替换数据框中的重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70047965/

相关文章:

python - Python 中捕获组的字符串操作

python - 基于字符,如何在新行中分隔 pandas 数据帧的每个单元格?

python - 有没有办法使用 Pandas Python 将 excel 中具有相同键值的行中的所有值相加?

python - 如何将具有行数组的 Dataframe 转换为 numpy 矩阵?

r - r中数据框为空时如何向列添加值

python - 如何对数据帧进行切片并将其重新组装成新的数据帧

Python 将 HTML 箭头显示到数据框

python - Numpy argsort 不稳定性

python - opencv-折线和矩形交点

python - 使 __call__ 成为基类中可用于所有派生类的特定接口(interface)