我从python中的csv文件导入一些数据并创建一个名为frame5的数据帧。
我每天都有每日数据。到目前为止,我已经使用以下内容将日期转换为一周中的几天。
frame5['day_of_week']=frame5['date'].dt.dayofweek
days = {0:'Mon',1:'Tues',2:'Weds',3:'Thurs',4:'Fri',5:'Sat',6:'Sun'}
frame5['day_of_week'] = frame5['day_of_week'].apply(lambda x: days[x])
然后,为了计算我使用的每日均值:
grouped_day_of_week=frame5.groupby('day_of_week')
day_of_week_statistics=grouped_day_of_week['reward'].agg([np.mean,np.size,np.sum])
然后我想用日常手段制作情节。
但是,在数据框day_of_week_statistics中,天数似乎按字母顺序排序(每行是为每周的每一天计算的统计数据)。
如何更改日期的顺序,使它们以正确的顺序显示为“星期一”,“星期二”,“婚礼”,“星期四”,“星期五”,“星期六”,“太阳”?< / p>
答案 0 :(得分:1)
按日期预先排序。此外,您可以使用map / replace,因为apply很慢。
i = frame5['date'].dt.dayofweek.values.argsort()
frame5 = frame5.iloc[i]
frame5['day_of_week'] = frame5['day_of_week'].map(days) # .replace(days)
When calling groupby, call it with sort=False, since groupby usually returns groups in sorted order of index. We do this since we don't want to disrupt the sorted order from earlier.
grouped_day_of_week = frame5.groupby('day_of_week', sort=False)
改进的解决方案由Jon Clements提供。这利用了之前的概念,但效率更高。
在groupby
上致电dt.dayofweek
,然后在结果索引上致电map
-
g = frame5.groupby(frame5['date'].dt.dayofweek)['Reward'].agg(['mean', 'size', 'sum'])
g.index = g.index.map(days.get)