Как построить график используя колонки таблицы и индексы строк?
у меня есть вот такая сгруппированная таблица где индексы строк - тарифы использующиеся пользователями. Колонки - месяца. А значения - медианная длительность звонков пользователей выборки.
Не могу понять каким образом я могу построить график по этой таблице, пытался используя seaborn сделать lineplot который будет отображать две линии: 1)Изменения длительности звонков в тарифе smart 2)Изменение длительности звонков в тарифе ultra
Но мои попытки не увенчались успехом в момент когда я попытался передать на ось X названия колонок
UPD: Если это поможет:
Изначально таблица выглядела вот так, это все звонки совершённые за год(около 300000 строк)
Потом я их сгруппировал по пользователям для решения другой задачи:
calls_duration_perMonth_data = calls_data.pivot_table(index='user_id', columns='call_month', values='duration', aggfunc='sum')
И уже после этого группировал для подсчёта медианного/среднего:
calls_dur_allUsers = calls_duration_perMonth_data.groupby(by='tariff').median()
Ответы (1 шт):
Создаем искусственный DataFrame для демонстрации решения:
N = 10**5
df = pd.DataFrame({
"id": np.random.randint(500, size=N),
"duration": np.random.randint(30, size=N),
"call_date": np.random.choice(pd.date_range('2018-01-01', periods=365, freq='D'), N),
"tarif": np.random.choice(["smart", "ultra"], N)
})
получилось:
In [24]: df
Out[24]:
id duration call_date tarif
0 54 26 2018-12-23 ultra
1 338 16 2018-08-17 smart
2 493 15 2018-10-12 ultra
3 83 28 2018-07-31 smart
4 343 19 2018-06-19 smart
... ... ... ... ...
99995 489 1 2018-10-09 ultra
99996 213 29 2018-01-01 smart
99997 3 18 2018-09-22 smart
99998 267 14 2018-02-21 smart
99999 85 16 2018-07-21 ultra
[100000 rows x 4 columns]
решение:
(df.groupby([pd.Grouper(freq="MS", key="call_date"), "tarif"])
.sum()
["duration"]
.unstack()
.plot(grid=True))
plt.tight_layout()


