Python Panda: Mendapatkan indeks dari baris yang kolom sesuai nilai tertentu
Diberikan DataFrame dengan kolom "BoolCol", kami ingin mencari indeks dari DataFrame di mana nilai-nilai untuk "BoolCol" == True
Saat ini saya memiliki iterasi cara untuk melakukannya, yang bekerja dengan sempurna:
for i in range(100,3000):
if df.iloc[i]['BoolCol']== True:
print i,df.iloc[i]['BoolCol']
Tapi ini tidak benar panda's cara untuk melakukannya. Setelah beberapa penelitian, saat ini saya menggunakan kode ini:
df[df['BoolCol'] == True].index.tolist()
Yang satu ini memberikan saya sebuah daftar indeks, tetapi mereka tidak setara, ketika saya memeriksa mereka dengan melakukan:
df.iloc[i]['BoolCol']
Hasilnya adalah benar-benar Palsu!!
Yang akan menjadi benar Panda cara untuk melakukan ini?
220
5
df.iloc[i]
mengembalikanengan
barisdf
.aku
tidak mengacu ke indeks label,aku
adalah 0-berdasarkan indeks.Sebaliknya, atribut
index
kembali indeks yang sebenarnya label, bukan numerik baris-indeks:atau ekuivalen,
Anda dapat melihat perbedaan yang cukup jelas dengan bermain dengan DataFrame dengan non-default index yang tidak sama dengan baris's numerik posisi:
Jika anda ingin menggunakan indeks,
kemudian anda dapat memilih baris menggunakan
loc
bukaniloc
:Perhatikan bahwa
loc
juga dapat menerima boolean array:Jika anda memiliki boolean array,
topeng
, dan perlu ordinal nilai indeks, anda dapat menghitung mereka menggunakannp.flatnonzero
:Gunakan
df.iloc
untuk memilih baris dengan urutan indeks:Dapat dilakukan dengan menggunakan numpy di mana() fungsi:
Meskipun anda don't selalu membutuhkan index untuk pertandingan, tetapi kalau-kalau anda perlu:
Pertama, anda dapat memeriksa
query
ketika target kolom adalah jenisbool
(PS: tentang bagaimana untuk menggunakannya silahkan cek link )Setelah kita filter asli df oleh Boolean kolom kita dapat memilih indeks .
Juga panda memiliki
nol
, kita hanya pilih posisiBenar
baris dan menggunakannya irisDataFrame
atauindex
Cara yang mudah adalah untuk me-reset indeks DataFrame sebelum penyaringan:
Sedikit hacky, tapi itu's cepat!
Saya diperpanjang ini pertanyaan itu adalah bagaimana untuk mendapatkan
baris
,kolom
dannilai
dari semua pertandingan yang nilai?berikut ini adalah solusinya:
`` impor panda sebagai pd impor numpy sebagai np
def search_coordinate(df_data: pd.DataFrame, search_set: set) -> klik disini: nda_values = df_data.nilai-nilai tuple_index = np.di mana(np.isin(nda_values, [e untuk e di search_set])) kembali [(row, col, nda_values[row][col]) untuk row, col di zip(tuple_index[0], tuple_index[1])]
jika nama == 'utama': test_datas = [['kucing', 'anjing', ''], ['ikan mas', '', 'kucing'], ['Anjing', 'hamster', 'mouse'] ] df_data = pd.DataFrame(test_datas) cetak(df_data) result_list = search_coordinate(df_data, {'anjing', 'Anjing'}) cetak(f"\n\n{'baris':<4} {'col':<4} {'nama':>10") [cetak(f"{baris:<4} {col:<4} {nama:>10") untuk row, col, nama di result_list] ``
Output:
`` 0 1 2 0 kucing anjing 1 ikan mas kucing 2 anak Anjing hamster mouse
row col nama 0 1 anjing 2 0 Puppy ``