Могу ли я перерассчитать значение в кадре данных pandas после сброса значения, например, счетчик воды - PullRequest
2 голосов
/ 24 сентября 2019

Я хочу переслать данные моего счетчика воды, когда произойдет сброс, чтобы данные были чистыми для анализа.Сброс - это когда значение в следующей строке меньше, чем в предыдущем.

Мой фрейм данных Python Pandas выглядит следующим образом: -

     water  
0    31031    
1    31037  
2    31038  
3    31043   
4    131   (system was reset)
5    223
6    331
7    412
...

Возможно, имеется несколько сбросовданные о воде в моем фрейме данных pandas.

Исследования показывают, что использование циклов / итерации - не лучший вариант для фреймов данных pandas, поэтому я стараюсь избегать.

Я хотел бы обновить фрейм данныхdf, чтобы тот факт, что система была перезагружена с индексом 4, больше не виден, а показатели воды продолжают накапливаться.

например,

     water  
0    31031    
1    31037  
2    31038  
3    31043   
4    31174   # system reset to 0 so value should be 31043 + 131
5    31266   # continuing with the difference through to the end of df
6    31374
7    31445
...

import pandas as pd

df = pd.DataFrame({'water': [31031,31037,,31038,31043,131,223,331,412]})

df["waterreset"] = np.where(df["water"]-df["water"].shift(1)<0, df["water"] + df["water"].shift(1),df["water"])

print(df)

приведенная выше строка кода «waterreset» идентифицирует толькоодна строка, где происходит сброс и не заполняется вперед, плюс я бы предпочел использовать inplace = True для обновления текущего фрейма данных.

1 Ответ

0 голосов
/ 24 сентября 2019

Вы можете найти место сброса, взять предыдущие значения и добавить к подпоследовательности:

# resets
resets = df.water.diff().le(0)

# reading at resets
# cumsum is used to accumulate readings
readings = df.water.shift().where(resets).fillna(0).cumsum()

df.water += readings

Вывод:

     water
0  31031.0
1  31037.0
2  31038.0
3  31043.0
4  31174.0
5  31266.0
6  31374.0
7  31455.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...