панды отображают цвет временных рядов по идентификатору отдельного временного ряда

#python #pandas #matplotlib #seaborn

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

Вопрос:

В настоящее время я получаю следующий график:

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

Но вместо построения 2 отдельных временных рядов, которые не связаны, я хочу отобразить столбец metrik_0 с другим цветом для каждого device_id.

 import pandas as pd
from pandas import Timestamp
d = pd.DataFrame({'metrik_0': {Timestamp('2020-01-01 00:00:00'): -0.5161200349325471,
  Timestamp('2020-01-01 01:00:00'): 0.6404118012330947,
  Timestamp('2020-01-01 02:00:00'): -1.0127867504877557,
  Timestamp('2020-01-01 03:00:00'): 0.25828987625529976,
  Timestamp('2020-01-01 04:00:00'): -2.486778084008076,
  Timestamp('2020-01-01 05:00:00'): -0.30695039872663826,
  Timestamp('2020-01-01 06:00:00'): -0.6570670310316116,
  Timestamp('2020-01-01 07:00:00'): 0.3274964731894147,
  Timestamp('2020-01-01 08:00:00'): -0.8624113311084097,
  Timestamp('2020-01-01 09:00:00'): 1.0832911260447902},
 'device_id': {Timestamp('2020-01-01 00:00:00'): 9,
  Timestamp('2020-01-01 01:00:00'): 1,
  Timestamp('2020-01-01 02:00:00'): 1,
  Timestamp('2020-01-01 03:00:00'): 9,
  Timestamp('2020-01-01 04:00:00'): 9,
  Timestamp('2020-01-01 05:00:00'): 9,
  Timestamp('2020-01-01 06:00:00'): 9,
  Timestamp('2020-01-01 07:00:00'): 1,
  Timestamp('2020-01-01 08:00:00'): 1,
  Timestamp('2020-01-01 09:00:00'): 9}})

d.plot()
  

При использовании seaborn будет работать следующее.

 import seaborn as sns; sns.set()
d['device_id'] = d['device_id'].astype(str)
#display(d.head())
sns.lineplot(x='index', y='metrik_0', style='device_id', hue='device_id', data=d)
  

Может ли это быть изначально включено в вызов plot из pandas?

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

1. Код Seaborn plot должен завершиться ошибкой, поскольку index не является столбцом.

Ответ №1:

Изначально pandas не могут этого делать. Но вы можете пройти через groupby() :

 fig, ax = plt.subplots()
for dev, df in d.groupby('device_id'):
    df.plot(y='metrik_0', ax=ax, label=dev)
  

Вывод:

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