Subset multi-indexed DataFrame based on multiple level 1 columns(基于多个一级列的子集多索引DataFrame)
本文介绍了基于多个一级列的子集多索引DataFrame的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个多=索引的DataFrame,但我希望每个级别1只保留两列,用于每个级别0变量(即列‘1’和‘2’)。我可以单独设置它们的子集,但我想一起设置子集,这样我就可以并排保留这些值这是DataFrame
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)
以下是为级别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)
这将是预期的输出
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
推荐答案
以下是使用pd.IndexSlice
的一种方法:
idnx = pd.IndexSlice[:, ['one', 'two']]
df.loc[:, idnx]
输出:
bar1 bar3 foo1 foo2
one one two two
0 0.589999 0.261224 -0.106588 -2.309628
1 0.646201 -0.491110 0.430724 1.027424
另一种使用pd.DataFrame.loc
的小参数axis
的方法:
df.loc(axis=1)[:, ['one', 'two']]
输出:
bar1 bar3 foo1 foo2
one one two two
0 0.589999 0.261224 -0.106588 -2.309628
1 0.646201 -0.491110 0.430724 1.027424
注意:pd.DataFrame.loc的文档API中没有列出此参数,但在Using Slicers段落中关于中途向下的Using Slicers段落中引用了此参数。
这篇关于基于多个一级列的子集多索引DataFrame的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:基于多个一级列的子集多索引DataFrame
基础教程推荐
猜你喜欢
- 如何防止Groupby超越指数? 2022-09-22
- 跟在带量词的前瞻后面有什么作用? 2022-09-22
- 如何在hdf5文件的多个组之间拆分数据? 2022-09-21
- 使用工作区API导入方法导入数据库笔记本(动态内 2022-09-21
- 在 pandas 中使用带有多重索引的.loc 2022-09-22
- 获取多索引中某个级别的最后一个元素 2022-09-22
- 从顶点坐标创建三角网格 2022-09-21
- 如何将RPC与Volttron配合使用 2022-09-21
- Python h5py-为什么我收到广播错误? 2022-09-21
- 在OpenCV中放大后,Python会捕捉图像的特定部分 2022-09-22