У меня есть панд DataFrame с TIMESTAMP
колонке (не индекс), и формат метки времени выглядит следующим образом:Панды: бар участок с мультииндексных dataframe
2015-03-31 22:56:45.510
У меня также есть столбцы, называемые CLASS
и AXLES
. Я хотел бы вычислить количество записей за каждый месяц отдельно для каждого уникального значения AXLES
(AXLES
может принимать целочисленное значение между 3-12).
я придумал комбинацию resample
и groupby
:
resamp = dfWIM.set_index('TIMESTAMP').groupby('AXLES').resample('M', how='count').CLASS
Это, кажется, дает мне объект dataframe мультииндексного, как показано ниже.
In [72]: resamp
Out [72]:
AXLES TIMESTAMP
3 2014-07-31 5517
2014-08-31 31553
2014-09-30 42816
2014-10-31 49308
2014-11-30 44168
2014-12-31 45518
2015-01-31 54782
2015-02-28 52166
2015-03-31 47929
4 2014-07-31 3147
2014-08-31 24810
2014-09-30 39075
2014-10-31 46857
2014-11-30 42651
2014-12-31 48282
2015-01-31 42708
2015-02-28 43904
2015-03-31 50033
Как я могу получить доступ к различным компонентам этого объекта multiIndex, чтобы создать график штрихов для следующих условий?
- данные показывают, когда ОСИ = 3
- шоу х клещей в месяц - формат года (не дни, часы, минуты и т.д.)
Спасибо!
EDIT: Следующий код дает мне сюжет, но я не мог изменить форматирование xtick на MM-YY.
resamp[3].plot(kind='bar')
РЕДАКТИРОВАТЬ 2 Ниже приведен фрагмент кода, который генерирует небольшую выборку данных, подобно тому, что у меня есть:
dftest = {'TIMESTAMP':['2014-08-31','2014-09-30','2014-10-31'], 'AXLES':[3, 3, 3], 'CLASS':[5,6,7]}
dfTest = pd.DataFrame(dftest)
dfTest.TIMESTAMP = pd.to_datetime(pd.Series(dfTest.TIMESTAMP))
resamp = dfTest.set_index('TIMESTAMP').groupby('AXLES').resample('M', how='count').CLASS
resamp[3].plot(kind='bar')
РЕДАКТИРОВАТЬ 3: Здесь ниже является решением:
A.Plot Вся передискретизируется dataframe (основано на @Ako 'предложение s):
df = resamp.unstack(0)
df.index = [ts.strftime('%b 20%y') for ts in df.index]
df.plot(kind='bar', rot=0)
B.Plot индивидуальный индекс от dataframe повторно создается (на основе @Alexander' предложение s):
df = resamp[3]
df.index = [ts.strftime('%b 20%y') for ts in df.index]
df.plot(kind='bar', rot=0)
Попробуйте 'resamp.unstack (0) .plot (вид = 'бар') '. Это превращает оси в ряд, построенный отдельно. – ako
Спасибо. Это удобно при отображении всех данных в одном сюжете. Есть ли способ изменить формат ярлыков xtick с «2015-03-31 00: 00: 00' до« March 2015 ». Независимо от того, что я пытался, я не мог изменить формат. – marillion