2013-10-23 77 views
4

下面的代碼創建一個熊貓系列句法糖生成熊貓系列採用了分層多指標:對於具有多指標

import pandas as pd 
number_of_classes = 3 
number_of_price_brackets = 10 
survival_table = pd.Series(
    index = pd.MultiIndex.from_tuples(
    [(gender,klass,fare) 
    for gender in range(2) 
    for klass in range(number_of_classes) 
    for fare in range(number_of_price_brackets)], 
    names=['Gender','Class','Price Bracket'] 
    )) 

但是這種做法似乎有點「手動」。有沒有更漂亮的方式來生成survival_table變量?

回答

4

對我來說似乎很好。

您可以使用itertools.product來創建元組,而在理解中沒有三個for部分。但我認爲這是一件好事,對新手來說是可讀的,而itertools則不如此。迭代工具的方法是這樣的:

list(itertools.product(range(2), 
         range(number_of_classes), 
         range(number_of_price_brackets))) 

你也可以,如果你發現你經常做此定義的輔助功能。

def make_category_multiindex(categories, names): 
    from itertools import product 
    return pd.MultiIndex.from_tuples(list(product(*categories)), names=names) 

然後做:

categories = [range(2), 
       range(number_of_classes), 
       range(number_of_price_brackets)] 

names = ['Gender','Class','Price Bracket'] 

survival_table = pd.Series(index=make_category_multiindex(categories, names)) 
3

同樣的想法,不同的結構:

import pandas as pd 
from itertools import product 

column_names = ['Gender', 'Class', 'Price Bracket'] 
ranges = [range(2), range(3), range(10)] 
multi_index = pd.MultiIndex.from_tuples(
          list(product(*ranges)), 
          names=column_names) 
survival_table = pd.Series(index=multi_index) 
1

應當指出的是,熊貓0.13介紹pd.MultiIndex.from_product(),允許寫:

pandas.MultiIndex.from_product((range(2), 
           range(3), 
           range(10)), 
           names=['Gender','Class','Price Bracket'])