Я получил данные с накопленными номерами.Есть ли умный способ обратить накопление данных в обратном порядке, чтобы он у меня был месяц за месяцем и не накладывался друг на друга?
Пример ввода:
Date SalesRep itemA
01-12-2017 X 1
01-12-2017 Y 0
01-12-2017 Z 0
01-01-2018 X 1
01-01-2018 Y 1
01-01-2018 Z 0
01-02-2018 X 1
01-02-2018 Y 1
01-02-2018 Z 1
Желаемый вывод:
Date SalesRep itemA
01-12-2017 X 1
01-12-2017 Y 0
01-12-2017 Z 0
01-01-2018 X 0
01-01-2018 Y 1
01-01-2018 Z 0
01-02-2018 X 0
01-02-2018 Y 0
01-02-2018 Z 1
Я использую тот скрипт, который я повторно использовал на форуме.
import pandas as pd
df = pd.read_excel('File.xlsx')
df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
df = df.sort_values('Date', ascending=False) # This now sorts in date order
cum_columns = ['itemA']
result = df.merge(
df.groupby('SalesRep')[cum_columns].diff(),
left_index=True, right_index=True, suffixes=['', '_uncum']
).fillna({'{}_uncum'.format(cum_column): df[cum_column] for cum_column in cum_columns})
print(result)
Поскольку для последнего месяца каждое значение равно 1, тогда как остальные месяцы равны 0. Как я могу изменить сценарий для работы с моим делом?
РЕДАКТИРОВАТЬ
Используя ответ JohnE, я получаю ошибку, пожалуйста, посмотрите:
Date SalesRep ItemA itemA_diff
2018-08-01 00:00:00 John 1 1
2018-07-01 00:00:00 John 1 0
2018-06-01 00:00:00 John 0 -1
2018-05-01 00:00:00 John 0 0
2018-04-01 00:00:00 John 0 0
2018-03-01 00:00:00 John 0 0
2018-02-01 00:00:00 John 0 0
2018-01-01 00:00:00 John 0 0
2017-12-01 00:00:00 John 0 0
2017-11-01 00:00:00 John 0 0
2017-10-01 00:00:00 John 0 0
Я должен получить
Date SalesRep ItemA itemA_diff
2018-08-01 00:00:00 John 1 0
2018-07-01 00:00:00 John 1 1
2018-06-01 00:00:00 John 0 0
2018-05-01 00:00:00 John 0 0
2018-04-01 00:00:00 John 0 0
2018-03-01 00:00:00 John 0 0
2018-02-01 00:00:00 John 0 0
2018-01-01 00:00:00 John 0 0
2017-12-01 00:00:00 John 0 0
2017-11-01 00:00:00 John 0 0
2017-10-01 00:00:00 John 0 0
Что следует изменить?