2017-12-26 39 views
1

내 질문에 대한 논리적 계속이 주제는 Setting values with multiindex in pandas입니다. 그래서이 예와 대답은 제 상황에도 딱 들어 맞습니다. 하나의 수준 색인 만 사용하여 multiindex 데이터 프레임의 설정 값

그들은 내가 인덱스 수준의 사용자 지정 숫자와 많은의 dataframes의이, f.loc[(slice(None), "one"), 0] = 1

로하지만 내 경우에 multiindex 값을 설정, 그래서 내가 지정하지 않고, 단지 마지막 수준에 인덱싱을 사용하고 싶습니다 다른 사람 - f.loc[:::, "one"), 0] = 1 같은 smth. 오후 8시 30 분 P.S. 또한, "1"열에 Indexer이 있으면 사용할 수 있습니까? array([ True, True, True, ..., True, True, True], dtype=bool)

답변

1

IIUC는 pd.IndexSlice를 사용하려면 :

In [276]: df 
Out[276]: 
        0   1 
first second 
bar one  0.414213 -0.316333 
     two  1.109279 0.307283 
baz one -0.287986 -1.963492 
     two  0.858867 0.553895 
foo one -0.152813 -2.489409 
     two  1.022960 0.377656 
qux one  1.549389 -0.307250 
     two -1.150914 -3.517356 

In [277]: df.loc[pd.IndexSlice[:,'one'], 0] = 1 

In [278]: df 
Out[278]: 
        0   1 
first second 
bar one  1.000000 -0.316333 
     two  1.109279 0.307283 
baz one  1.000000 -1.963492 
     two  0.858867 0.553895 
foo one  1.000000 -2.489409 
     two  1.022960 0.377656 
qux one  1.000000 -0.307250 
     two -1.150914 -3.517356 

부울 색인 mask를 사용하여 :

In [291]: mask = (df[0] > 1).values 

In [292]: mask 
Out[292]: array([False, True, False, False, False, True, False, False], dtype=bool) 

In [293]: df.loc[mask] 
Out[293]: 
        0   1 
first second 
bar two  1.109279 0.307283 
foo two  1.022960 0.377656 

In [294]: df.iloc[mask] 
Out[294]: 
        0   1 
first second 
bar two  1.109279 0.307283 
foo two  1.022960 0.377656 

In [295]: df[mask] 
Out[295]: 
        0   1 
first second 
bar two  1.109279 0.307283 
foo two  1.022960 0.377656 
+0

감사 인덱서는 배열이 될 수 있습니다. 'P.S.'에 대한 정보를 추가해 주 시겠어요 –

+0

@LadenkovVladislav, 죄송합니다, P.S.을 이해하지 못합니다. 부품. 'Indexer'는 무엇이며 어떻게 사용하고 싶습니까? – MaxU

+0

그냥 가면입니다. 예를 들면 다음과 같습니다 :'array ([True, True, True, ..., True, True, True], dtype = bool)' –