@Elick

Как в Python, Pandas сделать cumsum() по столбцу до определенного значения суммы?

Здравствуйте, возник вопрос. Есть датафрейм с числами. Нужно применить к его столбцу функцию cumsum() так, чтобы он выдал кумулятивную сумму этого столбца, но значения складывались при определенном условии, после чего суммирование начиналось бы заново. Я пытаюсь придумать как это сделать без циклов, дабы было максимально быстро, но может кто-то уже знает решение. Заранее спасибо.

Прим.
Условие: если сумма <= 6, идет суммирование, иначе суммирование начинается заново
Столбец на вход ; Столбец на выход
1 ; 1
3 ; 4
2 ; 6
5 ; 5
3 ; 8
1 ; 1
2 ; 3
  • Вопрос задан
  • 1687 просмотров
Решения вопроса 1
@Elick Автор вопроса
Самое быстрое, что получилось

vals = pd.Series([1,3,2,5,3,1,2])

fv = 6

def cumscums(vals, fv = fv):
    vals_ = []
    vals_.append(vals[0])  
    vals = vals[1:]
    for ind,line in enumerate(vals, start=1):
        if vals_[ind-1] < fv:
            vals_.append(vals_[ind-1] + line)
        else:
            vals_.append(line)
    return vals_

ccc = cumscums(vals, fv = fv)
pd.Series(ccc)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Viktor_T2
@Viktor_T2
python developer
import pandas as pd

l = [[1, 1],[3, 4],[2, 6],[5, 5],[3, 8],[1, 1],[2, 3]]

df = pd.DataFrame(l)
df['cumsum'] = df[1].cumsum()
df['group1'] = df[1].cumsum() // 6 # целочисленное деление как признак группы
df['group2'] = df[1] < 6

df['cum_6'] = df.groupby(['group1','group2'])[1].cumsum()

print(df)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы