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]