我有一个带有此索引的 Dataframe :
index = pd.MultiIndex.from_product([['stock1','stock2'...],['price','volume'...]])
对于df['stock1']
来说,这是一个有用的结构,但是我如何选择所有的价格数据呢?我对文档没有任何意义。
我尝试了以下方法,但没有成功:x一个月一个月x一个月二个月一个月x一个月三个月一个月x一个月四个月
如果这种指数风格被普遍认为是一个坏主意,那么什么是更好的选择呢?我应该选择一个多指数的股票指数,作为时间序列上的标签,而不是列水平?
多谢了
EDIT-我对列使用了多索引,而不是索引(我的措辞占了上风)。文档中的示例侧重于多级索引而不是列结构。
7条答案
按热度按时间kkih6yb81#
同样使用John的数据样本:
使用
xs()
是对MultiIndex
进行切片的另一种方法:或者,如果用
MultiIndex
代替列:rpppsulh2#
使用@JohnZwinck的数据样本:
但是如果对于第二个索引,我想选择除price之外的所有值,并且有多个值,所以枚举不是一个选项。是否有类似slice(~' price ')的东西
首先,我们来命名指数级别:
现在我们可以使用
df.query()
方法:vi4fp9gy3#
我发现访问具有MultiIndex列的DataFrame中的第二级列的最直观的解决方案是将
.loc
与slice()
一起使用。如果您的DataFrame带有
使用
df.loc[:, (slice(None), "price")]
将传送具有
"price"
的子列的所有列在
df.loc[:, (slice(None), "price")]
中,loc:
的第一个参数传递所有行的结果,第二个参数(slice(None), "price")
是一个元组,负责选择所有第一级列(slice(None)
)和所有名称为"price"
的第二级列。xfb7svmp4#
df.unstack()
将“撕掉”MultiIndex
的最后一层,使DataFrame更加常规,每种数据类型一列。例如:为您提供:
xfb7svmp5#
虽然@MaxU 's是更好的答案,但我想在这里指出,我们也可以单独地reset_index MultiIndex的任何部分,例如,假设:
导致DF:
例如:
将导致:
0aydgbwb6#
您也可以先交换级别,然后按第一个级别进行选择(基于@ntg的sample data):
也适用于
axis=1
的列。iqxoj9l97#
我还注意到你错过了这个选项:
作为时间数据的最佳实践,将其保存在与行对应的列中,最好是Python中的datetime对象(Pandas内置了对它的特性支持),可以使用掩码语法只获取与您感兴趣的时间。
这就是你访问数据框中一列的方式。但是对于多列,我们可以传递一个列表,或者一个冒号来获取全部:
一种有用的查询方式(而且快速)是使用掩码指定哪些行/列满足所需的条件:
希望这能有所帮助,并一如既往地随时跟进这个答案,如果我完全误解了你的问题,我很乐意进一步帮助。