Câu trả lời:
Chắc chắn, bạn có thể sử dụng .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
Mặc dù thành thật mà nói tôi không cần bản thân mình. Thông thường truy cập theo tên thực hiện những gì tôi muốn ( df["pear"]
, df[["apple", "orange"]]
hoặc có thể df.columns.isin(["orange", "pear"])
), mặc dù tôi chắc chắn có thể thấy các trường hợp bạn muốn số chỉ mục.
insert
một cột mới sau một cột hiện có.
Đây là một giải pháp thông qua việc hiểu danh sách. cols là danh sách các cột để lấy chỉ mục cho:
[df.columns.get_loc(c) for c in cols if c in df]
cols
có ít yếu tố hơn df.columns
, làm for c in cols if c in df
sẽ nhanh hơn.
Giải pháp của DSM hoạt động, nhưng nếu bạn muốn tương đương trực tiếp với which
bạn có thể làm(df.columns == name).nonzero()
Khi bạn có thể đang tìm kiếm nhiều kết quả khớp cột, một giải pháp được vector hóa bằng searchsorted
phương pháp có thể được sử dụng. Do đó, với df
khung dữ liệu và query_cols
tên cột cần tìm kiếm, việc triển khai sẽ là -
def column_index(df, query_cols):
cols = df.columns.values
sidx = np.argsort(cols)
return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]
Chạy mẫu -
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])
Trong trường hợp bạn muốn tên cột từ vị trí cột (ngược lại với câu hỏi OP), bạn có thể sử dụng:
>>> df.columns.get_values()[location]
Sử dụng @DSM Ví dụ:
>>> 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'
Những cách khác:
df.iloc[:,1].name
df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.)
df.columns[location]
?
.iloc
toán tử, trong đó bạn phải chỉ truyền số nguyên cho cả hàng và cột.