我怀疑这是微不足道的,但是我还没有发现一个咒语,它可以让我从Pandas数据框中根据层次键的值选择行。例如,假设我们有以下数据帧:
import pandas
df = pandas.DataFrame({'group1': ['a','a','a','b','b','b'],
'group2': ['c','c','d','d','d','e'],
'value1': [1.1,2,3,4,5,6],
'value2': [7.1,8,9,10,11,12]
})
df = df.set_index(['group1', 'group2'])
df看起来和我们预期的一样:
如果df未在group1上编制索引,我可以执行以下操作:
df['group1' == 'a']
但在这个带有索引的数据帧上,这是失败的。所以也许我应该把它想象成一个有层次索引的熊猫系列:
df['a','c']
没有。那也失败了。
那么,如何选择所有行,其中:
尝试使用
xs
来非常精确:语法如下:
因为
group1
和group2
是索引。请原谅我之前的尝试!为了只获得第二个索引,我认为您必须交换索引:
但我相信如果我错了韦斯会纠正我的。
在Python 0.19.0中,有一个新的建议方法,在这里解释1。我相信他们给出的最清楚的例子是下面的例子,其中他们从四级索引中分割出来。数据帧就是这样生成的:
这就是他们选择不同行的方式:
所以很简单,在
df.loc[(indices),:]
中,您可以指定每个级别要选择的索引,从最高级别到最低级别。如果不想选择索引的最低级别,可以忽略指定它们。如果不想在其他指定级别之间创建切片,则添加slice(None)
。两种情况都显示在示例中,其中级别D被省略,级别B在A和C之间指定相关问题 更多 >
编程相关推荐