2017-02-08 2 views
0

У меня есть dataframe, который выглядит следующим образом (левый столбец индекс):Устройте панда DataFrame для цвета Plotting

YYYY-MO-DD HH-MI-SS_SSS ATMOSPHERIC PRESSURE (hPa) mean 
2016-11-07 14:00:00  1014.028782 
2016-11-07 15:00:00  1014.034111 
    ....      .... 
2016-11-30 09:00:00  1006.516436 
2016-11-30 10:00:00  1006.216156 

Теперь я хочу, чтобы построить цветовую палитру с этими данными - поэтому я хочу, чтобы создать X (горизонтальная ось), чтобы быть только даты:

2016-11-07, 2016-11-08,...,2016-11-30 

и (вертикальная ось) Y быть время:

00:00:00, 01:00:00, 02:00:00, ..., 23:00:00 

и, наконец, т он Z (цветная карта) будет данными давления для каждой даты и времени [f (x, y)].

Как я могу организовать данные для такого рода построения?

Спасибо!

ответ

2

С тестовыми данными подготовлены следующим образом:

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

samples = 24 * 365 
index = pd.date_range('2017-01-01', freq='1H', periods=samples) 
data = pd.DataFrame(np.random.rand(samples), index=index, columns=['data']) 

Я хотел бы сделать что-то вроде этого:

data = data.reset_index() 
data['date'] = data['index'].apply(lambda x: x.date()) 
data['time'] = data['index'].apply(lambda x: x.time()) 

pivoted = data.pivot(index='time', columns='date', values='data') 

fig, ax = plt.subplots(1, 1) 

ax.imshow(pivoted, origin='lower', cmap='viridis') 

plt.show() 

Который производит:

enter image description here

Для улучшения маркировки оси, это старт:

ax.set_yticklabels(['{:%H:%M:%S}'.format(t) for t in data['time'].unique()]) 
ax.set_xticklabels(['{:%Y-%m-%d}'.format(t) for t in data['date'].unique()]) 

но вам необходимо выяснить, как выбрать, как часто появляется ярлык с set_xticks() и set_yticks()

+0

Спасибо! Но в моем случае мне нужно разделить индекс даты и времени на разные столбцы (одно только время и другую только дату), а затем перегруппироваться по часам. Как это возможно? – ValientProcess

+0

'данные [ 'дата'] = данные [ 'индекс'] применяются. (Лямбда-х: x.date())' 'и данные [ 'время'] = данные [ 'Index'] применить (лямбда-х.: x.time()) 'разделяет значения в индексе на два новых столбца. Я не понимаю, как вы хотите перегруппироваться, если ваши данные уже с шагом в 1 час? Если вы хотите усреднить свои значения, просто добавьте этот параметр 'aggfunc = np.mean' в метод' pivot (...) '. – Pablo

Смежные вопросы