相关疑难解决方法(0)

从pandas MultiIndex中选择列

我有DataFrame和MultiIndex列,如下所示:

# sample data
col = pd.MultiIndex.from_arrays([['one', 'one', 'one', 'two', 'two', 'two'],
                                ['a', 'b', 'c', 'a', 'b', 'c']])
data = pd.DataFrame(np.random.randn(4, 6), columns=col)
data
Run Code Online (Sandbox Code Playgroud)

样本数据

['a', 'c']从第二级别仅选择特定列(例如,不是范围)的正确,简单方法是什么?

目前我这样做:

import itertools
tuples = [i for i in itertools.product(['one', 'two'], ['a', 'c'])]
new_index = pd.MultiIndex.from_tuples(tuples)
print(new_index)
data.reindex_axis(new_index, axis=1)
Run Code Online (Sandbox Code Playgroud)

预期结果

然而,它不是一个好的解决方案,因为我必须淘汰itertools,手工构建另一个MultiIndex,然后重新索引(我的实际代码甚至更麻烦,因为列列表不是那么容易获取).我很确定必须有一些ixxs这样做,但我尝试的一切都导致了错误.

python hierarchical multi-index pandas

19
推荐指数
6
解决办法
1万
查看次数

如何从DataFrame中的命名列级别选择值的子集?

假设我们有一个DataFrame多级列标题.

level_0         A                   B                   C          
level_1         P                   P                   P          
level_2         x         y         x         y         x         y
0       -1.027155  0.667489  0.314387 -0.428607  1.277167 -1.328771
1        0.223407 -1.713410  0.480903 -3.517518 -1.412756  0.718804
Run Code Online (Sandbox Code Playgroud)

我想从命名级别中选择列列表.

required_columns = ['A', 'B']
required_level = 'level_0'
Run Code Online (Sandbox Code Playgroud)

方法1 :(不赞成使用df.loc)

print df.select(lambda x: x[0] in required_columns, axis=1)
Run Code Online (Sandbox Code Playgroud)

这个问题是我必须用0指定级别.如果我使用级别的名称,它将失败.

方法2:

print df.xs('A', level=required_level, axis=1)
Run Code Online (Sandbox Code Playgroud)

这个问题是我只能指定一个值.如果我使用['A','B']则失败.

方法3:

print df.ix[:, df.columns.get_level_values(required_level).isin(required_columns)]
Run Code Online (Sandbox Code Playgroud)

这有效,但不像前两种方法那样简洁!:)

题:

如何使方法1或2工作?或者,有更多的pythonic方式?

MWE:

import pandas as pd
import numpy as np

header = pd.MultiIndex.from_product([['A', 'B', 'C'],
                                     ['P'],
                                     ['x', 'y']], …
Run Code Online (Sandbox Code Playgroud)

python multi-index dataframe pandas

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

Python / Pandas-查询MultiIndex列

我正在尝试在MultiIndex列上使用查询。它适用于MultiIndex行,但不适用于该列。是否有一个原因?该文档显示的示例类似于下面的第一个示例,但并不表示它不适用于MultiIndex列。

我知道还有其他方法可以做到这一点,但是我正在专门尝试使用查询功能来做到这一点。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.random((4,4)))
df.index = pd.MultiIndex.from_product([[1,2],['A','B']])
df.index.names = ['RowInd1', 'RowInd2']
# This works
print(df.query('RowInd2 in ["A"]'))

df = pd.DataFrame(np.random.random((4,4)))
df.columns = pd.MultiIndex.from_product([[1,2],['A','B']])
df.columns.names = ['ColInd1', 'ColInd2']
# query on index works, but not on the multiindexed column
print(df.query('index < 2'))
print(df.query('ColInd2 in ["A"]'))
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

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

标签 统计

multi-index ×3

pandas ×3

python ×3

dataframe ×1

hierarchical ×1