Python 3.x pandas.DataFrame中的独立索引

Python 3.x pandas.DataFrame中的独立索引,python-3.x,pandas,Python 3.x,Pandas,我有两个独立索引的数据,比如一个日期和一个整数。两者都确定唯一的行。现在,我想通过日期或整数访问行。如果我通过创建数据帧,这似乎不起作用 import pandas as pd df = pd.DataFrame(data=[['a', 'b'], ['c', 'd'], ['e', 'f']], columns=['col1', 'col2'], index=[[pd.to_datetime('2017-10-13'), pd.to_datetime('20

我有两个独立索引的数据,比如一个日期和一个整数。两者都确定唯一的行。现在,我想通过日期或整数访问行。如果我通过创建数据帧,这似乎不起作用

import pandas as pd
df = pd.DataFrame(data=[['a', 'b'], ['c', 'd'], ['e', 'f']], columns=['col1', 'col2'],
                  index=[[pd.to_datetime('2017-10-13'), pd.to_datetime('2017-10-14'), pd.to_datetime('2017-10-15')],
                         [123, 124, 125]])
因为索引是分层的。数据帧将是

               col1 col2
2017-10-13 123    a    b
2017-10-14 124    c    d
2017-10-15 125    e    f
使用
.loc
我可以通过日期访问,比如说
df.loc['2017-10-13']
工作得很好,正如预期的那样(实际上更好,因为字符串似乎自动转换为
datetime
格式)。不幸的是,如果我想通过整数索引访问一行(例如使用
df.loc[123]
),我会得到


现在有人知道如何通过整数索引访问行了吗?

您需要元组来获取
多索引中的seelct值:

print (df.loc[('2017-10-13', 123)])
col1    a
col2    b
Name: (2017-10-13 00:00:00, 123), dtype: object

如果复杂,请选择使用:


编辑:

需要功能:


您还可以通过将名称设置为索引来执行查询,即

df.index.names=('a','b')
df.query('b==123')
输出:

col1 col2 a b 2017-10-13 123 a b col1 col2 a b 2017-10-13 123 a b
非常感谢,不幸的是,这对我没有帮助,因为我只想通过知道整数而不是日期来访问一行。那么就更简单了,给我一点时间。我完全忘记了
xs
。好吧,选择权值得投票。你的解决方案也是;)非常感谢你。我更喜欢@jezrael的解决方案,因为我不必为索引定义名称。甚至我也喜欢他的解决方案。他是熊猫大师。这就是为什么我在答案中添加了一个
idx = pd.IndexSlice
print (df.loc[idx['2017-10-13', 123]])
col1    a
col2    b
Name: (2017-10-13 00:00:00, 123), dtype: object

idx = pd.IndexSlice
print (df.loc[idx['2017-10-13', 123],:])
               col1 col2
2017-10-13 123    a    b
idx = pd.IndexSlice
print (df.loc[idx['2017-10-13', 123], 'col1'])
2017-10-13  123    a
Name: col1, dtype: object
print (df.xs(123, level=1))
           col1 col2
2017-10-13    a    b

print (df.xs(123, level=1, drop_level=False))
               col1 col2
2017-10-13 123    a    b
df.index.names=('a','b')
df.query('b==123')
col1 col2 a b 2017-10-13 123 a b