[python] python pandas의 열 이름에서 열 인덱스 가져 오기

R에서 열 이름을 기반으로 열 색인을 검색해야 할 때 수행 할 수있는 작업

idx <- which(names(my_data)==my_colum_name)

팬더 데이터 프레임과 동일한 작업을 수행하는 방법이 있습니까?



답변

물론, 당신은 사용할 수 있습니다 .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

솔직히 말해서 나는 종종 이것을 직접 필요로하지 않습니다. 색인 번호를 원하는 경우를 확실히 볼 수 있지만 일반적으로 이름으로 액세스하여 원하는 것을 수행합니다 ( df["pear"], df[["apple", "orange"]]또는 어쩌면 df.columns.isin(["orange", "pear"])).


답변

다음은 목록 이해를 통한 솔루션입니다. cols는 색인을 가져올 열 목록입니다.

[df.columns.get_loc(c) for c in cols if c in df]


답변

DSM의 솔루션은 작동하지만 직접 동등한 것을 which원한다면 할 수 있습니다(df.columns == name).nonzero()


답변

여러 열 일치 항목을 찾으려면 searchsorted방법 을 사용하여 벡터화 된 솔루션을 사용할 수 있습니다. 따라서 df데이터 프레임과 query_cols검색 할 열 이름으로 구현은 다음과 같습니다.

def column_index(df, query_cols):
    cols = df.columns.values
    sidx = np.argsort(cols)
    return sidx[np.searchsorted(cols,query_cols,sorter=sidx)]

샘플 런-

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])


답변

열 위치에서 열 이름을 원한다면 (OP 질문과 다른 방법으로) 다음을 사용할 수 있습니다.

>>> df.columns.get_values()[location]

@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'

다른 방법들:

df.iloc[:,1].name

df.columns[location] #(thanks to @roobie-nuby for pointing that out in comments.) 


답변

이건 어때요:

df = DataFrame({"pear": [1,2,3], "apple": [2,3,4], "orange": [3,4,5]})
out = np.argwhere(df.columns.isin(['apple', 'orange'])).ravel()
print(out)
[1 2]


답변