我的问题是这个主题的合理延续: Setting values with multiindex in pandas。所以这个例子和答案也适合我的情况。
他们使用f.loc[(slice(None), "one"), 0] = 1
但在我的情况下,我有很多数据框的自定义索引级别数,所以我想在最后一级使用索引,没有指定其他人 - 像f.loc[:::, "one"), 0] = 1
一样。
附:另外,如果我有一个Indexer
列"一个",我可以使用吗?
索引器可以是一个数组:array([ True, True, True, ..., True, True, True], dtype=bool)
答案 0 :(得分:2)
您要使用pd.IndexSlice
的IIUC:
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