Matplotlib:一年中所有星期一每分钟的观察数量

时间:2015-09-02 04:42:47

标签: python datetime matplotlib

我有一个pandas DataFrame,其中一列是一堆日期(日期时间类型)。我试图绘制一年中所有星期一的每分钟观察次数与当天的分钟数。

例如,假设我的数据中有两个星期一,第一个星期一的09:01有3个观察,第二个星期一的09:01有4个观察。我想绘制7(3 + 4)对9 * 60 + 1 = 541(也就是说,09:01是自当天开始以来的第541分钟)。我是这样开始的:

def minutes_in_day(arg):
    #returns minute number in day  
    return arg.hour*60+arg.minute

def get_day(arg):
    return arg.isocalendar()[2]

# df is my pandas dataframe
df['day']=df['my_datetime_variable'].apply(get_day)
df['minute']=df['my_datetime_variable'].apply(minutes_in_day)
group=df.groupby(['day','minute'])
my_data=group['whatever_variable'].count()

my_data有两个索引:从1(星期一)到7(星期日)的日索引和从潜在0到潜在24 * 60-1 = 1439的分钟索引。我怎样才能使用matplotlib(pyplot)仅在day index为1时绘制针对分钟索引的观察计数?

1 个答案:

答案 0 :(得分:0)

我认为这或多或少是你想要的:

#import modules
import random as randy 
import numpy as np
import pandas as pd

#create sample dataset
idx=randy.sample(pd.date_range(start='1/1/2015',end='5/5/2015',freq='T'),2000)
idx.sort()
dfm=pd.DataFrame({'data':np.random.randint(0,2,len(idx))},index=idx)

#resample to fill in the gaps and groupby day of the week (0-6) and time
dfm=dfm.resample('T')
dfm=dfm.groupby([dfm.index.dayofweek,dfm.index.time]).count()

#Select monday (the '0th' day of the week) 
dfm=dfm.loc[0]

#plot
dfm.plot(title="Number of observations on Mondays",figsize=[12,5])

给出

enter image description here

正如您在pandas.DatetimeIndex docs中所读到的那样,dayofweek属性返回星期几= 0 - 星期日= 6的星期几,time属性返回numpy } datetime.time数组。