Python 分配给多索引片

Python 分配给多索引片,python,pandas,Python,Pandas,我想将第0列中级别为1==y的元素设置为nan。 对于.xs(),我会这样做:df.xs('y',level=1)[0]=np.nan 这显然不起作用。类似于df.ix[(:,'y'),0]=np.nan的东西当然也是无效的。关于改进多索引片语法有一个开放的方法,但现在我建议: In [332]: midx = MultiIndex(levels=[['zero', 'one'], ['x','y']], .....: labels=[[1,1,0,0]

我想将第0列中级别为1==y的元素设置为nan。 对于.xs(),我会这样做:
df.xs('y',level=1)[0]=np.nan
这显然不起作用。类似于
df.ix[(:,'y'),0]=np.nan的东西当然也是无效的。

关于改进多索引片语法有一个开放的方法,但现在我建议:

In [332]: midx = MultiIndex(levels=[['zero', 'one'], ['x','y']],
   .....:                   labels=[[1,1,0,0],[1,0,1,0]])
   .....: 

In [333]: df = DataFrame(randn(4,2), index=midx)

In [334]: print(df)
               0         1
one  y  0.313092 -0.588491
     x  0.203166  1.632996
zero y -0.557549  0.126204
     x  1.643615 -0.067716
希望这适用于您的真实数据集

In
In [59]: idx_slice = [(x, 'y') for x in df.index.levels[0]]

In [60]: idx_slice
Out[60]: [('zero', 'y'), ('one', 'y')]

In [62]: df.ix[idx_slice, 0] = np.nan

In [63]: df
Out[63]: 
               0         1
one  y       NaN  0.210371
     x -1.109476  1.861331
zero y       NaN  0.189710
     x -1.013922 -1.465135

[4 rows x 2 columns]
In [51]: df = DataFrame(randn(4,2), index=midx)

In [52]: df.loc[df.index.get_loc_level('y',level=1)[0],0] = np.nan

In [53]: df
Out[53]: 
               0         1
one  y       NaN -0.260289
     x  0.122913  0.728180
zero y       NaN -0.010145
     x -0.532615  0.758914

[4 rows x 2 columns]
df.loc[(slice(None),'y'),0] = np.nan