python - 提取 pandas 多索引数据帧的子集

标签 python pandas multi-index

>new_dat=dat_corr.merge(dat_class,on="Asset",how="right").set_index(['Country','‌​Class','Asset'])
>new_dat.shape
(89, 89) 
>temp1='UNITEDSTATES' 
>temp2='Equity'
>new_dat.loc[ (new_dat.index.get_level_values('Country').isin([temp1]) & new_dat.index.get_level_values('Class').isin([temp2]))]'
>new_dat.columns=new_dat.index

最后一行给出了 [3 行 x 89 列]。我的 89 个专栏是股票/外汇/金融/商品的组合。如果我只想要美国股票与所有其他股票的比较,而不想要整个 89 列,我该怎么做? 我还为列添加了多重索引。现在的问题是,我在行和列上都有多个索引,如何使用它进行过滤 以下是一小部分数据:

国家/地区 美国 加拿大\ 类别 股权 股权
Assets DJ1指数 SP1指数 ND1指数 PT1指数
国家级 Assets
美国股票 DJ1 指数 1.000000 0.958038 0.747192 0.648373
SP1指数 0.958038 1.000000 0.825458 0.717545
ND1指数 0.747192 0.825458 1.000000 0.612487
加拿大股票 PT1指数 0.648373 0.717545 0.612487 1.000000
墨西哥股票 IS1Index 0.622570 0.664499 0.565702 0.575618

国家/地区 墨西哥 巴西 德国 英国\ 类别 股权 股权 股权 股权
Assets IS1Index BZ1Index VG1Index Z1Index
国家级 Assets
美国股票 DJ1 指数 0.622570 0.523704 0.566993 0.520526
SP1指数 0.664499 0.565941 0.587933 0.539138
ND1指数 0.565702 0.484441 0.458135 0.391391
加拿大股票 PT1指数 0.575618 0.526663 0.499343 0.493260
墨西哥股票 IS1Index 1.000000 0.577041 0.502558 0.487487

最佳答案

您可以将列添加到 .loc 方法中的逗号后面,如下所示:

df.loc[(cond1) & (cond2), 'column_name']

这将输出按条件过滤的 df,仅包含一列 column_name

如果将它们放入列表中,则可以有多列:

df.loc[(cond1) & (cond2), ['column_name1', 'column_name2']]

您可以看到docs了解更多详情。

编辑:

如果您的列也是MultiIndex,您可以使用IndexSlice:

import pandas as pd
idx = pd.IndexSlice
df.loc[(cond1) & (cond2), idx[:,'column_name']]

请注意,idx[:,'column_name'] 应根据您的多索引设置进行调整。 IE。 MultiIndex 的每个级别都需要有 :column_name

您可能会在 MultiIndex docs 中找到有关如何使用此功能的有用示例。 。值得注意的是,需要对 Index 进行 lexsorted 的警告,并且 pandas 版本应为 0.14.+。

如果您提供数据框的可重现示例,则可以更轻松地给出更具体的答案。

关于python - 提取 pandas 多索引数据帧的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28166104/

相关文章:

python - 计算前一行中大于当前行值的值

python - 通过与连续组进行比较来过滤 pandas groupby

列表中的 Python 不支持的操作数类型

python - Pandas merge_asof 不想在 pd.Timedelta 上合并,给出错误 "must be compat with type int64"

Python/DataReader/Yahoo - 随着 pandas 面板的弃用,我怎样才能将股票数据放入多索引数据框中?

python - 值错误 : Length mismatch: Expected axis has 0 elements while creating hierarchical columns in pandas dataframe

python - 从具有多级标题的数据框中删除行

python - Django FormView : ViewDoesNotExist at/s3direct/

python - 标记重复行并为重复行添加范围编号,Python 3.6

python - 如何部分读取巨大的 CSV 文件?