W R, gdy musisz pobrać indeks kolumny na podstawie nazwy kolumny, którą możesz zrobić
idx <- which(names(my_data)==my_colum_name)
Czy istnieje sposób, aby zrobić to samo z ramkami danych pand?
Jasne, możesz użyć .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
chociaż szczerze mówiąc sam często tego nie potrzebuję. Zwykle dostęp według nazwy robi to, co chcę ( df["pear"]
, df[["apple", "orange"]]
a może df.columns.isin(["orange", "pear"])
), chociaż zdecydowanie mogę zobaczyć przypadki, w których chcesz numer indeksu.
.iloc
operatora, gdzie musisz podać tylko liczby całkowite zarówno dla wierszy, jak i kolumn.insert
do nowej kolumny po istniejącej kolumnie.Oto rozwiązanie dzięki zrozumieniu listy. cols to lista kolumn, dla których można uzyskać indeks:
źródło
cols
ma mniej elementów niżdf.columns
, robieniefor c in cols if c in df
byłoby szybsze.Rozwiązanie DSM działa, ale jeśli chcesz bezpośredni odpowiednik,
which
możesz to zrobić(df.columns == name).nonzero()
źródło
Gdy szukasz wielu dopasowań kolumn, możesz zastosować wektoryzowane rozwiązanie przy użyciu
searchsorted
metody . Zatemdf
jako ramka danych iquery_cols
wyszukiwane nazwy kolumn implementacją byłoby -Przykładowy przebieg -
źródło
Jeśli chcesz nazwę kolumny z lokalizacji kolumny (odwrotnie do pytania OP), możesz użyć:
Korzystanie z @DSM Przykład:
Innymi słowy:
źródło
df.columns[location]
?co powiesz na to:
źródło