замените значение строки предыдущим значением, если разница между ними меньше фиксированного значения в пандах - PullRequest
1 голос
/ 20 апреля 2019

У меня есть датафрейм типа

Index  Value
0        5
1        Nan
2        6
3        16
4        23
5        32
6        33
7        34

если разница с предыдущей строкой меньше 2, значение текущей строки должно быть равным только предыдущей строке.

Итак, я хочу это как

Index  Value
0        5
1        Nan
2        6
3        16
4        23
5        32
6        32
7        32
I have tried : 

test = np.where(df.Value.notnull() & df.Value.shift(-1).notnull() & ((df.Value - df.Value.shift(-1)) < 2),df.Value.shift(-1),df.Value)

это не дает желаемого выхода, где я иду не так?

Edit:

Привет, у меня есть небольшое изменение в моем требовании. Если предыдущее значение равно нулю, я хочу, чтобы оно сравнивалось с предыдущим ненулевым значением и вычисляло разницу. Так что в этом случае я хочу, чтобы это было

Index  Value
0        5
1        Nan
2        5
4        23
5        32
6        32
7        32

Значение индекса-2 должно быть только 5, а не 6

1 Ответ

3 голосов
/ 20 апреля 2019

В одну сторону, используя diff и cumsum, создайте ключ группы, затем мы используем transform

s=df.Value.diff()
df.groupby((s.isnull()|s.gt(2)).cumsum()).Value.transform('first')
0     5.0
1     NaN
2     6.0
3    16.0
4    23.0
5    32.0
6    32.0
7    32.0
Name: Value, dtype: float64

Обновление хе-хе

s=df.Value.diff()
print(df.groupby((s.gt(2)).cumsum()).Value.transform('first').mask(df.Value.isnull()))
0     5.0
1     NaN
2     5.0
3    16.0
4    23.0
5    32.0
6    32.0
7    32.0
Name: Value, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...