Pandas数据帧数据时间切片与多索引比较

2024-04-26 01:34:44 发布

您现在位置:Python中文网/ 问答频道 /正文

对于单索引数据帧,我可以执行以下操作:

df2 = DataFrame(data={'data': [1,2,3]}, 
                index=Index([dt(2016,1,1),
                      dt(2016,1,2),
                      dt(2016,2,1)]))

>>> df2['2016-01 : '2016-01']
                data
    2016-01-01     1
    2016-01-02     2

>>> df2['2016-01-01' : '2016-01-01']
                data
    2016-01-01     1

当你给它一个完整的一天(即2016-01-01)时,日期-时间切片就起作用了;当你给它一个部分日期时,它也起作用,比如仅仅是年份和月份(2016-01)。所有这些都很好,但是当你引入多重索引时,它只适用于完整的日期。部分日期切片似乎不起作用了

^{pr2}$

好吧,没问题,但部分日期:

>>> df['2016-01' : '2016-01']
 File "pandas/index.pyx", line 134, in pandas.index.IndexEngine.get_loc      (pandas/index.c:3824)
 File "pandas/index.pyx", line 154, in pandas.index.IndexEngine.get_loc (pandas/index.c:3704)
 File "pandas/hashtable.pyx", line 686, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12280)
 File "pandas/hashtable.pyx", line 694, in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:12231)
  KeyError: '2016-01'

(我缩短了回溯)。在

有没有可能?这是虫子吗?有没有什么方法可以让我不必求助于像:

df.loc[(df.index.get_level_values('date') >= start_date) &
       (df.index.get_level_values('date') <= end_date)]

如有任何提示、意见、建议等,我们将不胜感激!我试了很多其他的东西都没有用!在


Tags: inpandasdfdatagetdateindexline
2条回答

使用pandasIndexSlice可以获得更通俗的语法。在

idx = pd.IndexSlice
df.loc[idx['2016-01-01':'2016-01-01', :], :])

别忘了熊猫片是左右兼有的。在

横截面应:

df.xs(slice('2016-01-01', '2016-01-01'), level='date')

文档:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.xs.html

相关问题 更多 >

    热门问题