Как создать график совокупного дохода?

#python #matplotlib #seaborn #plotnine

#python #matplotlib #сиборн #plotnine

Вопрос:

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

Я думаю, что мне нужно использовать groupby , но я нахожу лучший способ достичь желаемого результата. У меня есть пример графика, который я хочу воспроизвести или (получить что-то подобное):

введите описание изображения здесь

Каждая строка на графике представляет «Год ввода в эксплуатацию».

Я создал игрушечные данные, чтобы упростить их:

 dataset = {'ClientId': [10,20,20,20,10,5,3,7,5,20,12,5],
           'Year Onboarded': [2019,2017,2018,2017,2020,2019,2017,2018,2019,2020,2018,2017],
           'Year': [2020,2018,2018,2017,2020,2020,2018,2019,2020,2020,2018,2019],
           'Revenue': [100,50,25,30,40,50,200,600,20,40,100,20]}
df = pd.DataFrame(data=dataset)
 

Комментарии:

1. Ваш вопрос о подготовке данных или о том, как сгенерировать график?

2. Это больше касается подготовки данных, после этого график должен быть в порядке

3. Для меня не имеет особого смысла, что клиент 10 был запущен в 2020 году, но получил доход в 2019 году (?). Возможно, ваш набор данных toy нуждается в проверке, или я неправильно понял проблему.

4. @Jzbach Ты прав, я это исправил

5. Была ли какая-то особая проблема, когда вы пытались это сделать?

Ответ №1:

Если я прав (поскольку данные toy по-прежнему показывают некоторую несогласованность, т. Е. Не должен ли «Год ввода в эксплуатацию» быть одинаковым для данного клиента?), Вы ищете что-то вроде:

df['cumsum'] = df.groupby(['ClientId', 'Year']).Revenue.transform('cumsum')

И это даст:

Результат