[英]Setting values of multiindex dataframe using only one-level indexing
我的問題是本主題的邏輯延續: Setting values with multiindex in pandas 。 所以這個例子和答案也適合我的情況。
他們使用f.loc[(slice(None), "one"), 0] = 1
設置多f.loc[(slice(None), "one"), 0] = 1
值
但在我的情況下,我有很多具有自定義索引級別數的數據幀,所以我只想在最后一級使用索引,而不指定其他 - 像f.loc[:::, "one"), 0] = 1
。 PS另外,如果我有一個列“一”的Indexer
,我可以使用它嗎? 索引器可以是一個數組: array([ True, True, True, ..., True, True, True], dtype=bool)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.