Группируйте датафрейм по времени суток и составляйте график на 1 фигуре - PullRequest
0 голосов
/ 25 февраля 2020

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

Структура фрейма данных заполнена измерениями, проводимыми почти каждую минуту (25k + строки):

                                     some_val
...
2020-02-22 00:00:00                  1.1
2020-02-22 00:01:01                  1.4
2020-02-22 00:02:01                  1.5
...
2020-02-23 00:00:05                  1.7
2020-02-23 00:01:05                  1.6
2020-02-23 00:02:06                  1.6
...
2020-02-24 00:00:02                  1.4
2020-02-24 00:01:03                  1.8
2020-02-24 00:02:03                  1.3

Я хочу сгруппировать этот кадр данных по каждой минуте дня, поэтому первая группа (время дня 00:00) должна состоять из [1.1, 1.7, 1.4] и т. Д.

Затем я хочу увидеть некоторые тренды, построив их на 1 фигуре, где:

  • Ось X - это время с шагом 1 минута (00:00, 00:01, ..., 23:59 )
  • Ось Y равна some_val - столько измерений за каждый раз X, сколько они есть в каждой группе

Пока я не хочу count() или mean() что-нибудь. Простая группировка, нанесение всего на одну фигуру и сохранение ее в файл.

Когда я читаю, я смогу использовать pandas groupby или resample вместе с matplotlib.pyplot, но каким-то образом я не смог Не удается это сделать.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Код решения

import pandas as pd

data={'Date':['2020-02-22T00:00:00.000000000', '2020-02-22T00:01:00.000000000',
           '2020-02-22T00:02:00.000000000'],'some_val':[1.1, 1.4, 1.5]}
    df=pd.DataFrame.from_dict(data)

Печать

import matplotlib .pyplot as plt
df['Date']=pd.to_datetime(df['Date'])#Converting Date to datetime 
df.set_index(df['Date'], inplace=True)#Setting Date as index
df['x']= df.index.minute #Extracting minutes
df.plot(x='x', y='some_val')
0 голосов
/ 25 февраля 2020

Если вам нужна каждая минута в день, пожалуйста, попробуйте;

data={'Date':['2020-02-22T00:00:00.000000000', '2020-02-22T00:01:00.000000000',
       '2020-02-22T00:02:00.000000000','2020-02-23T00:00:00.000000000', '2020-02-23T00:01:00.000000000',
       '2020-02-23T00:02:00.000000000'],'some_val':[1.1, 1.4, 1.5,2.1, 2.4, 2.5]}
    df=pd.DataFrame.from_dict(data)
    df['Date']=pd.to_datetime(df['Date'])
   df.set_index(df['Date'], inplace=True)
   df['x']= df.index.minute
   for x, df2 in df.groupby(df.index.date):
    df2.plot(x='x', y='some_val')
    plt.title(x)
...