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
我想将第 0 列中的元素设置为 nan,其中 level 1 == y。
使用 .xs() 我会这样做:df.xs('y', level=1)[0] = np.nan
这显然是行不通的。类似 df.ix[(:, 'y'), 0] = np.nan
的内容当然也是无效的。
最佳答案
<= 0.13.1
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]
在 0.14 中,您将能够使用新的语法,参见:https://github.com/pydata/pandas/pull/6134
类似于:
df.loc[(slice(None),'y'),0] = np.nan
应该可以。
关于python - 分配给 MultiIndex 切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21539260/