Bokeh小部件从数据框中选择一个组

时间:2014-12-24 21:07:05

标签: python pandas bokeh

我有一个类似这样的数据集:

fruits = ["orange", "plum", "lime"]
data = [(random.choice(fruits), 
         random.randint(0,100), 
         random.randint(0,100)) for i in range(16)]
dframe = pd.DataFrame(data, columns=["fruit", "x", "y"])

其中fruit只有几个值。我想要一个选择小部件,这样你就可以选择你想在情节中看到哪种水果。

这是我目前的更新功能:

source = bk.ColumnDataSource(dframe)
by_fruit = dframe.groupby('fruit')

def update(fruit):
    grouped = by_fruit.get_group(fruit)
    source.data['x'] = grouped['x']
    source.data['y'] = grouped['y']
    source.data['fruit'] = grouped['fruit']
    source.push_notebook()

interact(update, fruit=fruits)

但是当我获得更多列时,通过并重新分配每列的值似乎过于冗长。这很容易出错,好像我遗漏了一个列,它们会变得不同,并且会变得不对齐。

Pandas擅长切片和切块,我觉得我错过了什么。有什么更简洁的方法可以同时更改Series每列中的ColumnDataSource

[This example in an IPython Notebook]

1 个答案:

答案 0 :(得分:1)

您可以遍历grouped

的列
def update(fruit):
    grouped = by_fruit.get_group(fruit)
    for col in grouped:
        source.data[col] = grouped[col]
    source.push_notebook()