我有一个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时绘制针对分钟索引的观察计数?
答案 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])
给出
正如您在pandas.DatetimeIndex docs中所读到的那样,dayofweek
属性返回星期几= 0 - 星期日= 6的星期几,time
属性返回numpy
} datetime.time
数组。