Jawaban:
Tentu, Anda bisa menggunakan .get_loc()
:
In [45]: df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
In [46]: df.columns
Out[46]: Index([apple, orange, pear], dtype=object)
In [47]: df.columns.get_loc("pear")
Out[47]: 2
walaupun jujur saja saya tidak sering membutuhkan ini sendiri. Biasanya akses berdasarkan nama melakukan apa yang saya inginkan ( df["pear"]
,, df[["apple", "orange"]]
atau mungkin df.columns.isin(["orange", "pear"])
), meskipun saya pasti dapat melihat kasus di mana Anda ingin nomor indeks.
insert
kolom baru setelah kolom yang ada.
Berikut adalah solusi melalui pemahaman daftar. cols adalah daftar kolom untuk mendapatkan indeks untuk:
[df.columns.get_loc(c) for c in cols if c in df]
cols
memiliki lebih sedikit elemen daripada df.columns
, melakukan for c in cols if c in df
akan lebih cepat.
Solusi DSM berfungsi, tetapi jika Anda ingin yang setara langsung dengan yang dapat which
Anda lakukan(df.columns == name).nonzero()
Ketika Anda mungkin mencari untuk menemukan beberapa kolom yang cocok, solusi vektor menggunakan searchsorted
metode dapat digunakan. Dengan demikian, dengan df
sebagai kerangka data dan query_cols
sebagai nama kolom yang akan dicari, suatu implementasi akan -
def column_index(df, query_cols):
cols = df.columns.values
sidx = np.argsort(cols)
return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]
Contoh dijalankan -
In [162]: df
Out[162]:
apple banana pear orange peach
0 8 3 4 4 2
1 4 4 3 0 1
2 1 2 6 8 1
In [163]: column_index(df, ['peach', 'banana', 'apple'])
Out[163]: array([4, 1, 0])
Jika Anda ingin nama kolom dari lokasi kolom (sebaliknya ke pertanyaan OP), Anda dapat menggunakan:
>>> df.columns.get_values()[location]
Menggunakan Contoh @DSM:
>>> df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
>>> df.columns
Index(['apple', 'orange', 'pear'], dtype='object')
>>> df.columns.get_values()[1]
'orange'
Cara lain:
df.iloc[:,1].name
df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.)
df.columns[location]
?
.iloc
operator, di mana Anda hanya harus melewati bilangan bulat untuk baris dan kolom.