Pandas группа за последние 6 месяцев с исходной даты - PullRequest
0 голосов
/ 19 июня 2020

Мне нужно просуммировать столбец «qtd» с учетом последних 6 месяцев контрольной даты.

prod    date       qtd  sum
proda   2018-01-01  2    2
proda   2018-02-01  2    4
proda   2018-04-01  1    5
proda   2018-05-01  4    9
proda   2018-06-01  2    11
proda   2018-07-01  1    11

Мне нужно выяснить, как рассчитать «сумму» столбца.

Обратите внимание, что у меня не всегда есть каждый месяц в моем фреймворке, например, у меня нет марта. Учитывая контрольную дату (дату), мне нужно рассчитать 6 месяцев назад и просуммировать столбец «qtd»

Спасибо!

1 Ответ

0 голосов
/ 19 июня 2020

функция cumsum () выведет совокупную сумму для данного столбца. От numpy.

df[‘sum’] = df[‘qtd’].cumsum()

Хорошо. Если вы хотите извлечь только фрагмент и cal c cumsum (), вы можете использовать:

start_date = '2018-01-01'
end_date = '2018-05-01'
between = (df['date'] >= start_date) & (df['date'] <= end_date)
df2 = df[between]
df2['sum'] = df2['qtd'].cumsum()

df2

    prod    date        qtd sum
0   proda   2018-01-01  2   2
1   proda   2018-02-01  2   4
2   proda   2018-04-01  1   5
3   proda   2018-05-01  4   9

Или, если вы хотите вычислить его только между указанными c датами и добавить его в свой data frame, вы можете использовать:

start_date = '2/1/18'
end_date = '6/1/18'

def total(start, end, df):
    sum_col = []
    for i in range(df.shape[0]): # Loop for all lines
        if df['date'][i] < start:
  # If before start date, NA (you could change to 0 too)
            sum_col.append('NaN')
        elif df['date'][i] == start: # start to sum
            sum_col.append(df['qtd'][I])
  #sum between your start and end dates
        elif (df['date'][i] > start) and (df['date'][i] <= end): 
            sum_col.append(df['qtd'][i]+sum_col[i-1])
  # after end date, it just adds NAs. You can change to repeat the last total
        elif df['date'][i] > end:
            sum_col.append('NaN')
    return sum_col

df['sum'] = total(start_date, end_date, df)

df

output:

    prod    date    qtd sum
0   proda   1/1/18  2   NaN
1   proda   2/1/18  2   2
2   proda   4/1/18  1   3
3   proda   5/1/18  4   7
4   proda   6/1/18  2   9
5   proda   7/1/18  1   NaN

Надеюсь, это поможет.

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