我有以下数据框:
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/