Panda idxmax
işlevini kullanın . Anlaşılır:
>>> import pandas
>>> import numpy as np
>>> df = pandas.DataFrame(np.random.randn(5,3),columns=['A','B','C'])
>>> df
A B C
0 1.232853 -1.979459 -0.573626
1 0.140767 0.394940 1.068890
2 0.742023 1.343977 -0.579745
3 2.125299 -0.649328 -0.211692
4 -0.187253 1.908618 -1.862934
>>> df['A'].argmax()
3
>>> df['B'].argmax()
4
>>> df['C'].argmax()
1
Alternatif numpy.argmax
olarak numpy.argmax(df['A'])
, aynı şeyi sağlar ve en azından idxmax
lanet gözlemlerde olduğu kadar hızlı görünür .
idxmax()
tamsayıları değil, indeks etiketlerini döndürür.
- Örnek ':' a '-' e 'satırları gibi dizin etiketleriniz olarak dize değerleriniz varsa, maks'in 4. satırda (' d 'satırında değil) gerçekleştiğini bilmek isteyebilirsiniz.
- bu etiketin tamsayı konumunu istiyorsanız,
Index
manuel olarak almanız gerekir (bu, yinelenen satır etiketlerine izin verildiğinde zor olabilir).
TARİHİ NOTLAR:
idxmax()
0.11'den önce çağrılırdıargmax()
argmax
1.0.0'dan önce kullanımdan kaldırıldı ve 1.0.0'da tamamen kaldırıldı
- Pandalar 0.16'dan
argmax
beri, aynı işlevi vardı ve gerçekleştirdi (daha yavaş çalıştığı görüldü idxmax
).
argmax
işlevi , maksimum öğenin satır konumu dizini içindeki tamsayı konumunu döndürdü .
- pandalar, tamsayı dizinleri yerine satır etiketleri kullanmaya taşındı. Konumsal tamsayı endeksleri, özellikle yinelenen satır etiketlerinin yaygın olduğu uygulamalarda, etiketlerden çok daha yaygındı.
Örneğin, bu oyuncağı DataFrame
yinelenen bir satır etiketi ile düşünün :
In [19]: dfrm
Out[19]:
A B C
a 0.143693 0.653810 0.586007
b 0.623582 0.312903 0.919076
c 0.165438 0.889809 0.000967
d 0.308245 0.787776 0.571195
e 0.870068 0.935626 0.606911
f 0.037602 0.855193 0.728495
g 0.605366 0.338105 0.696460
h 0.000000 0.090814 0.963927
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
In [20]: dfrm['A'].idxmax()
Out[20]: 'i'
In [21]: dfrm.iloc[dfrm['A'].idxmax()] # .ix instead of .iloc in older versions of pandas
Out[21]:
A B C
i 0.688343 0.188468 0.352213
i 0.879000 0.105039 0.900260
Bu yüzden burada naif bir kullanım idxmax
yeterli değildir, ancak eski formu , maksimum sıranın konum konumunu argmax
doğru bir şekilde sağlayacaktır (bu durumda, konum 9).
Bu, dinamik olarak yazılan dillerde bu tür şeyleri bu kadar talihsiz ve ölü bir atı yenmeye değer yapan bu tür hataya eğilimli davranışlardan biridir. Sistem kodu yazıyorsanız ve sisteminiz birleştirilmeden önce düzgün şekilde temizlenmeyen bazı veri kümelerinde aniden kullanılıyorsa, yinelenen satır etiketleri, özellikle finansal varlıklar için CUSIP veya SEDOL tanımlayıcısı gibi dize etiketleri ile son derece kolaydır. Yazı sistemini size yardımcı olması için kolayca kullanamazsınız ve beklenmedik bir şekilde eksik verilere rastlamadan dizinde benzersizliği uygulayamayabilirsiniz.
Böylece, birim testlerinizin her şeyi kapsadığını umuyorsunuz (hiç kimsenin hiç test yazmamış olması muhtemeldir) - aksi takdirde (büyük olasılıkla) bunu kaçırıp kaçırmayacağınızı görmek için beklemişsinizdir. muhtemelen elle sorunu yeniden çalışırken ipython içinde kafanı duvara çarpardı sonuçları çıkışının edildi veritabanından işin kaç saat değerinde damla gitmek zorunda bu durumda çalışma zamanında hata, nihayet olduğunu bulmaktan dolayı idxmax
can sadece max satırının etiketini rapor edin ve daha sonra hiçbir standart işlevin otomatik olarak max satırının konumlarını almamasını, kendiniz için bir hata ayıklama uygulaması yazmanız, kodu düzenlemeniz ve sorunla tekrar karşılaşmadığınız için dua etmekten hayal kırıklığına uğratmak .