JD *_*ong 33 python multi-index dataframe pandas
我怀疑这是微不足道的,但我还没有发现让我根据分层键的值从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'])
Run Code Online (Sandbox Code Playgroud)
看起来像我们期望的那样:
如果df未在group1上编入索引,我可以执行以下操作:
df['group1' == 'a']
Run Code Online (Sandbox Code Playgroud)
但是这个带有索引的数据帧失败了.所以也许我应该把它想象成一个带有分层索引的Pandas系列:
df['a','c']
Run Code Online (Sandbox Code Playgroud)
不.那也失败了.
那么如何选择所有行:
Wes*_*ney 49
尝试使用xs
非常精确:
In [5]: df.xs('a', level=0)
Out[5]:
value1 value2
group2
c 1.1 7.1
c 2.0 8.0
d 3.0 9.0
In [6]: df.xs('c', level='group2')
Out[6]:
value1 value2
group1
a 1.1 7.1
a 2.0 8.0
Run Code Online (Sandbox Code Playgroud)
像下面这样的语法将起作用:
df.ix['a']
df.ix['a'].ix['c']
Run Code Online (Sandbox Code Playgroud)
因为group1
和group2
是指数.请原谅我以前的尝试!
要仅获得第二个索引,我认为你必须交换索引:
df.swaplevel(0,1).ix['c']
Run Code Online (Sandbox Code Playgroud)
但我相信如果我错了,韦斯会纠正我.