如何强制对 Bokeh DataTable 进行排序?
How can I force my Bokeh DataTable to be sorted?
我有一个使用 bokeh serve
渲染的 Bokeh DataTable,我希望它在用户不必单击列 header 的情况下开始排序。我想对行进行排序,以便生日日期按升序排列。我当前的代码如下:
from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, DateFormatter
from bokeh.plotting import curdoc
from pandas import DataFrame
import datetime
# data is usually fetched from somewhere else but this is the same format
data = [
('dan', datetime.datetime(2017, 1, 16, 21, 30)),\
('joel', datetime.datetime(2016, 2, 21, 21, 30)),\
('jeff', datetime.datetime(2017, 10, 2, 21, 30))]
ne = DataFrame()
ne['Name'] = [x[0] for x in data]
ne['Birthday'] = [x[1] for x in data]
source = ColumnDataSource(ne)
columns = [
TableColumn(field='Name', title='Name'),
TableColumn(field='Birthday', title='Birthday', formatter=DateFormatter())
]
dt = DataTable(source=source, columns=columns)
curdoc().add_root(column(dt))
不知道这是否是最好的方法,但我通过添加以下行对 DataFrame 进行预排序得到了您想要的结果
ne.sort_values('Birthday', inplace=True)
之前
source = ColumnDataSource(ne)
我有一个使用 bokeh serve
渲染的 Bokeh DataTable,我希望它在用户不必单击列 header 的情况下开始排序。我想对行进行排序,以便生日日期按升序排列。我当前的代码如下:
from bokeh.layouts import column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import DataTable, TableColumn, DateFormatter
from bokeh.plotting import curdoc
from pandas import DataFrame
import datetime
# data is usually fetched from somewhere else but this is the same format
data = [
('dan', datetime.datetime(2017, 1, 16, 21, 30)),\
('joel', datetime.datetime(2016, 2, 21, 21, 30)),\
('jeff', datetime.datetime(2017, 10, 2, 21, 30))]
ne = DataFrame()
ne['Name'] = [x[0] for x in data]
ne['Birthday'] = [x[1] for x in data]
source = ColumnDataSource(ne)
columns = [
TableColumn(field='Name', title='Name'),
TableColumn(field='Birthday', title='Birthday', formatter=DateFormatter())
]
dt = DataTable(source=source, columns=columns)
curdoc().add_root(column(dt))
不知道这是否是最好的方法,但我通过添加以下行对 DataFrame 进行预排序得到了您想要的结果
ne.sort_values('Birthday', inplace=True)
之前
source = ColumnDataSource(ne)