Выберите и посчитайте указанные c значения из pandas df - PullRequest
0 голосов
/ 20 февраля 2020

Мне нужна помощь в решении следующей проблемы:

данные выглядят как

dt  value
15  0
15  2   
15  8   
15  8   
15  10  
16  12
15  19  
15  35  
15  45
16  45  
16  45  
15  50
15  0
16  26  
15  43
15  50  
15  0
.
.
.

Теперь я должен суммировать dt, пока значение не достигнет 50, всегда начиная с 0.

Я попробовал следующее, но я не уверен, правильно ли это,

df['value'].values[(df['value'].values > 0) & (df['value'].values < 50)] = 1    
df =  df.assign(counter_col_x = df.loc[df['value'].eq(1)].groupby(df['value'].ne(df['value'].shift()).cumsum()).ngroup())

Спасибо за любые подсказки!

1 Ответ

1 голос
/ 21 февраля 2020

Простым способом, если бы вам не приходилось перезагружаться несколько раз в столбце, была бы кумулятивная сумма ряда. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cumsum.html

Я надеюсь, что вы имели в виду совокупную сумму значений, пока она не достигнет 50. Я мог только придумать способ присвоения значения Series в al oop. Надеюсь, это поможет.

new_cum_sum = 0
list_of_values = []
for x, y in zip(test['dt'], test['value']):
    if y== 0:
        new_cum_sum = x
    elif y <= 50:
        new_cum_sum+=x
    list_of_values.append(new_cum_sum)

test['test_cum'] = list_of_values
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...