ホームページ >バックエンド開発 >Python チュートリアル >階層インデックスを使用してネストされたディクショナリから Pandas DataFrame を作成する方法

階層インデックスを使用してネストされたディクショナリから Pandas DataFrame を作成する方法

DDD
DDDオリジナル
2024-12-02 03:30:13164ブラウズ

How to Create a Pandas DataFrame from a Nested Dictionary with Hierarchical Indexes?

階層インデックスを使用したネストされたディクショナリの項目から Pandas DataFrame を構築する

このシナリオでは、階層が以下で構成されるネストされたディクショナリから pandas DataFrame を作成します。 :

  • レベル 1: ユーザーID
  • レベル 2: カテゴリ
  • レベル 3: さまざまな属性

目的のデータフレームには、インデックスとしてユーザー ID、列としてカテゴリと属性が含まれている必要があります。

Pandas MultiIndex の活用

1 つの効率的なアプローチは、パンダの MultiIndex を利用し、マルチレベルのインデックス構造の作成を可能にします。この方法を使用するには:

  1. 目的の MultiIndex 値に合わせて、キーとしてタプルを使用するように入力辞書を再形成します。
  2. orient= を指定して、pd.DataFrame.from_dict を使用して DataFrame を構築します。データを定義されたタプルと位置合わせするための「index」
user_dict = {12: {'Category 1': {'att_1': 1, 'att_2': 'whatever'},
                  'Category 2': {'att_1': 23, 'att_2': 'another'}},
             15: {'Category 1': {'att_1': 10, 'att_2': 'foo'},
                  'Category 2': {'att_1': 30, 'att_2': 'bar'}}}

df = pd.DataFrame.from_dict({(i,j): user_dict[i][j] 
                           for i in user_dict.keys() 
                           for j in user_dict[i].keys()},
                       orient='index')

print(df)



               att_1     att_2
12 Category 1      1  whatever
   Category 2     23   another
15 Category 1     10       foo
   Category 2     30       bar

連結によるメソッド

または、連結によって段階的に DataFrame を構築することもできます。

  1. ユーザー ID を抽出し、コンポーネント データフレームを保存するための空のリスト。
  2. ディクショナリを反復処理して、各ユーザーのデータフレームを作成し、それをリストに追加します。
  3. pd.concat を使用してコンポーネント データフレームを連結し、ユーザー ID でインデックスを付けます。
user_ids = []
frames = []

for user_id, d in user_dict.iteritems():
    user_ids.append(user_id)
    frames.append(pd.DataFrame.from_dict(d, orient='index'))

df = pd.concat(frames, keys=user_ids)

print(df)


               att_1     att_2
12 Category 1      1  whatever
   Category 2     23   another
15 Category 1     10       foo
   Category 2     30       bar

以上が階層インデックスを使用してネストされたディクショナリから Pandas DataFrame を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。