programing

pandas데이터프레임 다중 인덱스에서 열 선택

goodsources 2023. 10. 23. 21:47
반응형

pandas데이터프레임 다중 인덱스에서 열 선택

다음 pd가 있습니다.데이터 프레임:

Name    0                       1                      ...
Col     A           B           A            B         ...
0       0.409511    -0.537108   -0.355529    0.212134  ...
1       -0.332276   -1.087013    0.083684    0.529002  ...
2       1.138159    -0.327212    0.570834    2.337718  ...

MultiIndex 열이 있습니다.names=['Name', 'Col']그리고 계층적인 수준들.Name라벨은 0에서 n까지이고, 각각의 라벨에는 2개가 있습니다.A그리고.B기둥들

나는 모든 것을 하위 선택하고 싶습니다.A(또는B) 이 DataFrame의 열입니다.

있습니다.get_level_values부울 인덱싱과 함께 사용하여 의도한 결과를 얻을 수 있는 메서드입니다.

In [13]:

df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([[1,2],['A','B']])
print df
          1                   2          
          A         B         A         B
0  0.543980  0.628078  0.756941  0.698824
1  0.633005  0.089604  0.198510  0.783556
2  0.662391  0.541182  0.544060  0.059381
3  0.841242  0.634603  0.815334  0.848120
In [14]:

print df.iloc[:, df.columns.get_level_values(1)=='A']
          1         2
          A         A
0  0.543980  0.756941
1  0.633005  0.198510
2  0.662391  0.544060
3  0.841242  0.815334

방법 1:

df.xs('A', level='Col', axis=1)

자세한 내용은 http://pandas.pydata.org/pandas-docs/stable/advanced.html#cross-section 을 참조하십시오.

방법 2:.

df.loc[:, (slice(None), 'A')]

주의 사항: 이 메서드를 사용하려면 레이블을 정렬해야 합니다.자세한 내용은 http://pandas.pydata.org/pandas-docs/stable/advanced.html#the-need-for-sortedness-with-multiindex 을 참조하십시오.

EDIT* 현재 가장 좋은 방법은 indexSlice를 사용하여 다중 인덱스를 선택하는 것입니다.

idx = pd.IndexSlice
A = df.loc[:,idx[:,'A']]
B = df.loc[:,idx[:,'B']]

언급URL : https://stackoverflow.com/questions/25189575/pandas-dataframe-select-columns-in-multiindex

반응형