簡體   English   中英

僅使用一級索引設置多索引數據幀的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM