我有两个数据帧作为两个不同的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,但无效。
答案 0 :(得分:0)
将周和年转换为日期时间
df = pd.to_datetime(df.YearWk.add('-0'), format='%Y-%W-%w')
按照
Parsing week of year to datetime objects with pandas