python pandas dataframe kolom dikonversi menjadi kunci dan nilai dikt

92

Saya memiliki bingkai data panda dengan beberapa kolom dan saya ingin membuat sebuah dict dari dua kolom: satu sebagai kunci dict dan yang lainnya sebagai nilai dict. Bagaimana saya bisa melakukan itu?

Dataframe:

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

Saya perlu mendefinisikan area sebagai kunci, dihitung sebagai nilai dalam dict. Terima kasih sebelumnya.

perigee
sumber

Jawaban:

215

Jika milik lakesAnda DataFrame, Anda dapat melakukan sesuatu seperti

area_dict = dict(zip(lakes.area, lakes.count))
punchagan
sumber
1
Dalam versi 0.17.1 mendapatkan kesalahan:TypeError: zip argument #2 must support iteration
jezrael
19
Solusi:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael
1
Jawaban lain dari pertanyaan ini stackoverflow.com/questions/18695605/…
Ben Fulton
1
Bagaimana jika Anda ingin lebih dari satu kolom menjadi nilai kamus? Saya sedang memikirkan sesuatu seperti area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column))). Bagaimana Anda mewujudkannya?
Jesse Marks
2
Jika argumen kedua memiliki beberapa nilai, ini tidak akan berhasil.
pnv
9

Dengan panda itu dapat dilakukan sebagai:

Jika danau adalah DataFrame Anda:

area_dict = lakes.to_dict('records')
pengguna2643517
sumber
1
tidak ada kolom 'catatan' dalam contoh yang diberikan. Juga dalam kasus seperti itu indeks akan menjadi kuncinya, yang bukan yang kita inginkan.
Michael D
11
@MichaelD 'catatan' bukan kolom. Ini adalah opsi untuk argumen orient.
Zheng Liu
2

Anda juga bisa melakukan ini jika ingin bermain-main dengan panda. Namun, saya suka cara punchagan.

# 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}
SammyRod
sumber