pythonpandasデータフレーム列がdictキーと値に変換されます


98

複数の列を持つパンダデータフレームがあり、2つの列からdictを作成したいと思います。1つはdictのキーとして、もう1つはdictの値として使用します。どうやってやるの?

データフレーム:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

エリアをキーとして定義し、dictの値としてカウントする必要があります。前もって感謝します。

回答:


229

場合はlakes、あなたがあるDataFrame、あなたのような何かを行うことができます

area_dict = dict(zip(lakes.area, lakes.count))

1
バージョン0.17.1ではエラーが発生します:TypeError: zip argument #2 must support iteration
jezrael 2015年

23
解決策:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael 2015年


1
ディクショナリの値に複数の列を含める場合はどうなりますか?私はのようなことを考えていarea_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column)))ます。これをどのように実現しますか?
ジェシーマークス

2
2番目の引数に複数の値がある場合、これは機能しません。
PNV

10

パンダの場合、次のように実行できます。

湖がDataFrameの場合:

area_dict = lakes.to_dict('records')

1
与えられた例には「レコード」列はありません。また、そのような場合、インデックスがキーになりますが、これは私たちが望んでいることではありません。
マイケル・D

11
@ MichaelD'records 'は列ではありません。これは引数のオプションですorient
鄭劉

これにより、実際には次の形式で辞書のリストが出力されます:[{'area':10、 'count':7}、{'area':20、 'count':5} ...]キーの代わりに- >値の辞書。
RoeiBahumi20年

2

パンダで遊んでみたい場合にもこれを行うことができます。しかし、私はパンチガンのやり方が好きです。

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.