Python dataframe проверяет приращение последовательных значений

1

У меня есть dataframe, как это

>>> df = pd.DataFrame([100, 150, 150, 103])
>>> df
     0
0  100
1  150
2  150
3  103
>>> 

Я хочу проверить, будет ли следующее значение меньше +10% или -10% от значения previus, если не заменить следующее значение с предыдущим значением

Это желаемый результат

     0
0  100
1  100
2  100
3  103

Я попытался использовать "where", но он не работает должным образом

>>> df.where(abs(df / df.shift()-1) < 0.1, df.shift().fillna(method='bfill'), inplace=True)
>>> df
     0
0  100
1  100
2  150
3  150

как я могу решить?

Теги:
pandas
series

1 ответ

0
Лучший ответ

Это метод ручной циклы с использованием pd.Series.iteritems.

df = pd.DataFrame([100, 150, 150, 103])

res = np.zeros(len(df[0]))
res[0] = df[0].iloc[0]

for idx, val in df[0].iloc[1:].iteritems():
    if abs(val / res[idx-1] - 1) < 0.1:
        res[idx] = val
    else:
        res[idx] = res[idx-1]

df[1] = res.astype(int)

print(df)

     0    1
0  100  100
1  150  100
2  150  100
3  103  103
  • 0
    спасибо, я буду использовать ручное решение
  • 0
    @ dan577, хорошо. Если это решение помогло (и только если .. Я надеюсь, что вы найдете лучший способ), не стесняйтесь принять (зеленая галочка слева).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню