Как построить данные временных рядов, содержащихся в DataFrame за определенные дни, что может привести к одной записи - PullRequest
1 голос
/ 10 октября 2019

Можно ли как-нибудь создать линейную диаграмму для DataFrame, содержащей только одну запись?

Образцы данных, которые у меня есть в DataFrame: Head = ['Date', 'Count1', 'Count2', 'Count3']

01-10-2010, 100, 0 , 100

Ось X: я пытаюсь отображать дату на основе каждого воскресенья

Ось Y: все остальные 3 счета

Я ссылался на https://python -graph-gallery.com / 122-множественные линии-диаграммы / , но я пытаюсь найти способ создания диаграммы с одной записью.

Пожалуйста, помогите мне, если у кого-то есть пример кода.

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Вам необходимо изменить форму вашего фрейма данных:

df = pd.DataFrame([['01-10-2010',100,0,100]], columns=['Date','Count1','Count2','Count3']

df

Вывод:

        Date  Count1  Count2  Count3
0 2010-01-10     100       0     100

Установить преобразование индекса в дату и время dtype и изменить его, используя melt:

df['Date'] = pd.to_datetime(df['Date'])

df.melt('Date').set_index('Date').plot()

Выход: enter image description here

1 голос
/ 10 октября 2019

Построение одной записи в виде строки по определению невозможно, так как для определения пробела нужны две точки.

Однако, когда я читаю ваш вопрос, вы хотите построить точки данных, которые вы имеете длязаданный день недели как временной ряд.

Если это так, вы можете попробовать следующее:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Сначала давайте сгенерируем диапазон (ежедневных) дат и некоторыеслучайные данные для ваших подсчетов:

dates = pd.date_range(start='1/1/2020', end='01/31/2020', freq='D')
count1 = np.random.randint(0,100,len(dates))
count2 = np.random.randint(0,100,len(dates))
count3 = np.random.randint(0,100,len(dates))

Это мы используем для определения фрейма данных pandas с датами в виде индекса:

df = pd.DataFrame({'dates': dates, 'count1': count1, 'count2': count2, 'count3': count3})
df.set_index('dates', inplace=True)

Если вы хотите построить данные только по воскресеньям, мыможно сделать это с помощью одной строки кода (с последующим принудительным рисованием matplotlib):

df[df.index.weekday==6].plot()
plt.show()

В этом последнем выражении используется числовое индексирование дней недели в Pandas DateTimeIndex, в котором понедельники == 0, вторники== 1, ..., воскресенье == 6.

Это приводит к следующему графику:

enter image description here

Однако линияпостроение графиков не работает для отдельных точек данных. Если у нас есть только одна точка данных в нашем фрейме данных, мы должны установить для свойства plots style значение '.', что соответствует точечной диаграмме:

df[df.index.weekday==6].plot(style='.')

enter image description here

Это также работает для отдельных точек данных, как если бы мы имели диапазон данных всего одну неделю:

dates = pd.date_range(start='1/1/2020', end='01/07/2020', freq='D')
count1 = np.random.randint(0,100,len(dates))
count2 = np.random.randint(0,100,len(dates))
count3 = np.random.randint(0,100,len(dates))
df = pd.DataFrame({'dates': dates, 'count1': count1, 'count2': count2, 'count3': count3})
df.set_index('dates', inplace=True)
df[df.index.weekday==6].plot(style='.')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...