Python 蟒蛇熊猫,我如何传递冒号&引用;通过变量发送到索引器
我正在研究一种方法,它最终将处理来自大型多索引数据帧的数据片。我可以为每个索引器生成掩码(基本上是定义切片的值列表): 这很好,但在某些情况下,我真的希望选择这些轴上的所有东西,相当于:Python 蟒蛇熊猫,我如何传递冒号&引用;通过变量发送到索引器,python,pandas,Python,Pandas,我正在研究一种方法,它最终将处理来自大型多索引数据帧的数据片。我可以为每个索引器生成掩码(基本上是定义切片的值列表): 这很好,但在某些情况下,我真的希望选择这些轴上的所有东西,相当于: df.loc[idx[a_mask,b_mask],idx[:,d_mask]] 是否有一种方法可以将冒号“:”作为变量传递到中,以替换第二个示例中的c_掩码?理想情况下,我只需将c_掩码设置为一个值,如“:”,但这当然不起作用(而且不应该这样做,因为如果我们有一个名为that的列会怎么样…)。但有没有办法通
df.loc[idx[a_mask,b_mask],idx[:,d_mask]]
是否有一种方法可以将冒号“:”作为变量传递到中,以替换第二个示例中的c_掩码?理想情况下,我只需将c_掩码设置为一个值,如“:”,但这当然不起作用(而且不应该这样做,因为如果我们有一个名为that的列会怎么样…)。但有没有办法通过变量传递一个值,该变量沿着其中一个索引器传递“整个轴”
我确实意识到我可以生成一个掩码,通过沿适当的轴聚集所有值来选择所有内容,但这并不重要,而且会添加大量代码。同样,我可以将数据帧访问分为5种场景(一种场景中有一个:另一种场景中有四个掩码),但这似乎不符合干燥原则,而且仍然很脆弱,因为它无法处理多方向整片选择
那么,我能通过变量传入的任何东西都会在索引器中选择整个方向,比如:would?还是有一种更优雅的方式可以选择整个方向?idx[slice(None)]
相当于idx[:]
所以这些都是等价的
In [11]: df = DataFrame({'A' : np.random.randn(9)},index=pd.MultiIndex.from_product([range(3),list('abc')],names=['first','second']))
In [12]: df
Out[12]:
A
first second
0 a -0.668344
b -1.679159
c 0.061876
1 a -0.237272
b 0.136495
c -1.296027
2 a 0.554533
b 0.433941
c -0.014107
In [13]: idx = pd.IndexSlice
In [14]: df.loc[idx[:,'b'],]
Out[14]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941
In [15]: df.loc[idx[slice(None),'b'],]
Out[15]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941
In [16]: df.loc[(slice(None),'b'),]
Out[16]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941
完美的我可以把它传过去。现在我在文档中也看到了:)
In [11]: df = DataFrame({'A' : np.random.randn(9)},index=pd.MultiIndex.from_product([range(3),list('abc')],names=['first','second']))
In [12]: df
Out[12]:
A
first second
0 a -0.668344
b -1.679159
c 0.061876
1 a -0.237272
b 0.136495
c -1.296027
2 a 0.554533
b 0.433941
c -0.014107
In [13]: idx = pd.IndexSlice
In [14]: df.loc[idx[:,'b'],]
Out[14]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941
In [15]: df.loc[idx[slice(None),'b'],]
Out[15]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941
In [16]: df.loc[(slice(None),'b'),]
Out[16]:
A
first second
0 b -1.679159
1 b 0.136495
2 b 0.433941