散景服务器 - 从日期时间轴到选择分类

时间:2018-02-15 21:13:34

标签: pandas datetime bokeh

我有两个数据帧作为两个不同的myData <- read_csv("foo.txt.gz", col_types = list("c","c","c","c","n")) 用于更新图表。一个看起来像

ColumnDataSources

另一个数据框的第一列是第一个数据帧的浮点数,由年份组成,后跟当年的周数,用冒号分隔

ENTRYDATE | Transactions
2017-01-01  290
2017-01-03  20
..
2018-02-04  118

我有一个Select Widget,它根据用户是想查看每日数据还是每周数据来更新折线图。每日情节变得很好。但是,当选择ENTRYDATE | Transactions 2017.1 310 2018.1 118 时,该图将周数视为数字数据,从一个数据点到下一个数据点存在较大差距(即2017.52至2018.1)

如何编辑我的代码,以便在用户进行选择时,每周数据会被明确显示?是否有更好的方法来表示几个日历年的周数?

以下是我的相关代码:

weekly

我已尝试通过dfdate=(df2.groupby([df2['ENTRYDATE'].dt.date]).size().reset_index(name='Transactions')) #WEEK df['YearWk']=df['ENTRYDATE'].dt.strftime('%Y.%W') #add year column dfweek=(df.groupby([df['YearWk']]).size().reset_index(name='Transactions')) dfweek.columns.values[0]='ENTRYDATE' #rename column to ENTRYDATE dfweek.sort_values('ENTRYDATE',ascending=True) #sort by Year.WeekNumber sourceDay=ColumnDataSource(data=dfdate) sourceWeek=ColumnDataSource(data=dfweek) p=figure(plot_width=800,plot_height=500, y_axis_label="Transaction Count", x_axis_label="Date",background_fill_color='beige') p.line(x="ENTRYDATE",y="Transactions",color='blue', source=sourceDay) p.xaxis.formatter=DatetimeTickFormatter() #update function def update_plot(attr, old, new): if new=='Daily': sourceDay.data={"ENTRYDATE":dfdate["ENTRYDATE"],"Transactions":dfdate["Transactions"]} elif new=='Weekly': sourceDay.data=sourceWeek.data p.x_range=str(dfweek["ENTRYDATE"].tolist()) #selecttool select=Select(title='Choose Your Time Interval:', options=['Daily','Weekly'], value='daily') select.on_change('value',update_plot) layout=row(select, p) curdoc().add_root(layout) p.x_range=dfweek["ENTRYDATE"].tolist()设置x_range,但无效。

1 个答案:

答案 0 :(得分:0)

将周和年转换为日期时间 df = pd.to_datetime(df.YearWk.add('-0'), format='%Y-%W-%w')按照 Parsing week of year to datetime objects with pandas