我有一个多索引数据框,但对于每个 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)
欢迎任何建议,非常感谢!
我有这个数据框,如果整行等于 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)