小编an1*_*0b3的帖子

基于多个级别 1 列的子集多索引 df

我有一个多索引数据框,但对于每个 0 级变量(即列“一”和“二”),我只想保留每个级别 1 的两列。我可以分别对它们进行子集化,但我想一起做,这样我就可以并排保留这些值

这是数据框

index = pd.MultiIndex.from_tuples(list(zip(*[['bar1', 'foo1', 'bar1', 'foo2','bar3','foo3'], ['one','two','three','two','one','four']])))
df = pd.DataFrame(np.random.randn(2, 6), columns=index)
Run Code Online (Sandbox Code Playgroud)

这是对级别 1 中的一列进行子集化的方法

df.iloc[:, df.columns.get_level_values(1)== 'one']
# or 
df.xs('one', level=1, axis=1)

# but adding two columns within either command will not work e.g. 
df.xs(('one','two), level=1, axis=1)
Run Code Online (Sandbox Code Playgroud)

这将是预期的输出

         bar1        foo1       foo2         bar3
          one         two        two          one
0   -0.508272   -0.195379   0.865563     2.002205
1   -0.771565    1.360479   1.900931    -1.589277
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议,非常感谢!

python multi-index pandas

4
推荐指数
3
解决办法
100
查看次数

如果行在python中总和为零,则用字符串替换单元格

我有这个数据框,如果整行等于 0(仅包含 NaN 和或 0),我试图用字符串替换单元格。

我想对除第一列之外的所有列执行此操作,但我的循环不起作用,它将 df 中的所有值更改为“测试”。

df = pd.DataFrame(data={'a':['a','b','c','d'],'id': [np.nan, 2, 0, np.nan], 'id1': [np.nan,2,np.nan, np.nan], 'b': [np.nan,1,0, np.nan]})
Run Code Online (Sandbox Code Playgroud)
for col in df:
    if col != 'a':
        df[~df.sum(axis=1).ne(0)] = 'test'
Run Code Online (Sandbox Code Playgroud)

我想要的输出

   a    id   id1     b
0  a  test  test  test
1  b     2     2     1
2  c  test  test  test
3  d  test  test  test
Run Code Online (Sandbox Code Playgroud)

python pandas

1
推荐指数
1
解决办法
40
查看次数

标签 统计

pandas ×2

python ×2

multi-index ×1