Temukan nilai maksimum kolom dan kembalikan nilai baris yang sesuai menggunakan Pandas


120

Struktur data;

Menggunakan Python Pandas Saya mencoba mencari Country& Placedengan nilai maksimum.

Ini mengembalikan nilai maksimum:

data.groupby(['Country','Place'])['Value'].max()

Tapi bagaimana cara mendapatkan nama Countrydan yang sesuai Place?

Jawaban:


169

Dengan asumsi dfmemiliki indeks unik, ini memberikan baris dengan nilai maksimum:

In [34]: df.loc[df['Value'].idxmax()]
Out[34]: 
Country        US
Place      Kansas
Value         894
Name: 7

Perhatikan bahwa idxmaxmengembalikan label indeks . Jadi jika DataFrame memiliki duplikat dalam indeks, label mungkin tidak secara unik mengidentifikasi baris tersebut, sehingga df.locdapat mengembalikan lebih dari satu baris.

Oleh karena itu, jika dftidak memiliki indeks unik, Anda harus membuat indeks unik sebelum melanjutkan seperti di atas. Bergantung pada DataFrame, terkadang Anda dapat menggunakan stackatau set_indexmembuat indeks menjadi unik. Atau, Anda dapat mengatur ulang indeks (sehingga baris dinomori ulang, mulai dari 0):

df = df.reset_index()

Terima kasih. Itulah yang saya cari.
richie

57
df[df['Value']==df['Value'].max()]

Ini akan mengembalikan seluruh baris dengan nilai maks


Penjelasan: - Ekspresi bagian dalam melakukan pemeriksaan boolean sepanjang dataFrame & indeks yang memenuhi sisi kanan ekspresi (.max ()) mengembalikan indeks, yang pada gilirannya memanggil baris lengkap dari dataFrame
penta

11

Negara dan tempat adalah indeks rangkaian, jika Anda tidak membutuhkan indeks, Anda dapat mengatur as_index=False:

df.groupby(['country','place'], as_index=False)['value'].max()

Edit:

Tampaknya Anda menginginkan tempat dengan nilai maksimal untuk setiap negara, kode berikut akan melakukan apa yang Anda inginkan:

df.groupby("country").apply(lambda df:df.irow(df.value.argmax()))

yang hanya akan mengembalikan nama kolom dan dtypes
richie

9

Saya pikir cara termudah untuk mengembalikan baris dengan nilai maksimum adalah dengan mendapatkan indeksnya. argmax()dapat digunakan untuk mengembalikan indeks baris dengan nilai terbesar.

index = df.Value.argmax()

Sekarang indeks dapat digunakan untuk mendapatkan fitur untuk baris tertentu itu:

df.iloc[df.Value.argmax(), 0:2]

8

Gunakan indexatribut DataFrame. Perhatikan bahwa saya tidak mengetik semua baris dalam contoh.

In [14]: df = data.groupby(['Country','Place'])['Value'].max()

In [15]: df.index
Out[15]: 
MultiIndex
[Spain  Manchester, UK     London    , US     Mchigan   ,        NewYork   ]

In [16]: df.index[0]
Out[16]: ('Spain', 'Manchester')

In [17]: df.index[1]
Out[17]: ('UK', 'London')

Anda juga bisa mendapatkan nilainya dengan indeks itu:

In [21]: for index in df.index:
    print index, df[index]
   ....:      
('Spain', 'Manchester') 512
('UK', 'London') 778
('US', 'Mchigan') 854
('US', 'NewYork') 562

Edit

Maaf karena salah paham apa yang Anda inginkan, coba berikut ini:

In [52]: s=data.max()

In [53]: print '%s, %s, %s' % (s['Country'], s['Place'], s['Value'])
US, NewYork, 854

benar. Tapi saya mencari output satu baris yang mengatakan, 'AS, Kansas, 894'
richie

Terima kasih. Ini akan menyelesaikan masalah untuk kumpulan data saat ini di mana hanya ada 1 kolom dengan nilai. Jika ada lebih banyak kolom dengan nilai @ unutbu, solusi akan bekerja lebih baik. Terima kasih.
richie

5

Untuk mencetak Negara dan Tempat dengan nilai maksimum, gunakan baris kode berikut.

print(df[['Country', 'Place']][df.Value == df.Value.max()])

2

Solusi saya untuk menemukan nilai maksimum di kolom:

df.ix[df.idxmax()]

, juga minimum:

df.ix[df.idxmin()]

2

Saya akan merekomendasikan penggunaan nlargestuntuk kinerja yang lebih baik dan kode yang lebih pendek. imporpandas

df[col_name].value_counts().nlargest(n=1)

2

Kamu bisa memakai:

print (df [df ['Value'] == df ['Value']. ​​max ()])


2

import pandas
df adalah bingkai data yang Anda buat.

Gunakan perintah:

df1=df[['Country','Place']][df.Value == df['Value'].max()]

Ini akan menampilkan negara dan tempat yang nilainya maksimal.


0

Saya mengalami kesalahan serupa saat mencoba mengimpor data menggunakan panda, Kolom pertama di kumpulan data saya memiliki spasi sebelum awal kata. Saya menghapus spasi dan itu bekerja seperti pesona !!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.