2014-12-24 97 views
0

選擇一組我有一個數據集排序是這樣的:散景小部件,從數據幀

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) 

,但經歷和重新分配各列的值似乎過於冗長,因爲我得到更多的列。這很容易出錯,就好像我忽略了一個專欄一樣,他們的長度也不一樣,並且沒有對齊。

熊貓擅長切片和切丁,我覺得我錯過了一些東西。同時更改ColumnDataSource每列中的Series的更簡潔的方法是什麼?

[This example in an IPython Notebook]

回答

1

你可以遍歷的grouped列:

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

是的,這是一個明顯的改善,因爲它避免了忘記,當您添加到更新或刪除列的問題。不過,熊貓通常有一些聰明的方法可以在沒有for循環的所有列上進行操作。但也許這是在轉換到散景的ColumnDataSource中丟失的東西。 – keturn

+0

可能會對拼寫進行很多小的改進,請提交有關Bokeh GH問題跟蹤器的改進建議! – bigreddot

+0

我發現通過省略索引列迭代熊貓羣。 ColumnDataSource.from_df分別處理它:https://github.com/bokeh/bokeh/blob/0.7.0/bokeh/models/sources.py#L54所以像這樣的任何更新函數也必須處理它。 – keturn