4

次のコードは、階層型 MultiIndex を使用して Pandas シリーズを生成します。

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

3 に答える 3

4

私には問題ないようです。

内包itertools.product表記の 3 つのセクションなしでタプルを作成するために使用できます。forしかし、これは良いことであり、初心者にとって読みやすいと思いますが、 を使用したアプローチitertoolsはそれほどではありません。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))
于 2013-10-23T20:38:01.503 に答える
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)
于 2013-10-23T20:40:33.160 に答える