为什么Pandas多索引切片从切片外部返回结果?

2024-04-27 23:49:36 发布

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

我有一个多索引的数据集,比如组(string)和日期(datetime64)。尝试使用

.xs(slice(startDate,endDate),level='Date',drop_level = False)

我想我会得到相同组的数据集,但是没有超出开始/结束范围的日期。你知道吗

相反,我将一些组按开始/结束范围进行切片,一些组缺少条目,而另一些组看起来根本没有切片。你知道吗

例如:

d={'group':['a','a','a','b','b','b','b','c','c','c','c','c','c','c','t','t','t','t','t','t','t','t','t','t','t','t','t','t'],
'date':[np.datetime64('2005-02-25'),np.datetime64('2005-02-25'),np.datetime64('2005-02-27'),
np.datetime64('2005-02-25'),np.datetime64('2005-02-26'),np.datetime64('2005-02-27'),np.datetime64('2005-02-26'),
np.datetime64('2005-01-25'),np.datetime64('2005-02-25'),np.datetime64('2005-03-27'),np.datetime64('2005-04-25'),np.datetime64('2005-05-26'),np.datetime64('2005-06-27'),np.datetime64('2005-07-26'),
np.datetime64('2005-01-25'),np.datetime64('2005-02-25'),np.datetime64('2005-03-27'),np.datetime64('2005-04-25'),np.datetime64('2005-05-26'),np.datetime64('2005-06-27'),np.datetime64('2005-07-26'),
np.datetime64('2005-02-25'),np.datetime64('2005-02-25'),np.datetime64('2005-02-27'),np.datetime64('2005-02-25'),np.datetime64('2005-02-26'),np.datetime64('2005-02-27'),np.datetime64('2005-02-26')],
'data':[1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7]}

df = pandas.DataFrame(d)
aggregate = df.groupby(('group','date')).sum()
aggregate

将产生

                  data
group date            
a     2005-02-25     3
      2005-02-27     3
b     2005-02-25     4
      2005-02-26    12
      2005-02-27     6
c     2005-01-25     1
      2005-02-25     2
      2005-03-27     3
      2005-04-25     4
      2005-05-26     5
      2005-06-27     6
      2005-07-26     7
t     2005-01-25     1
      2005-02-25     9
      2005-02-26    12
      2005-02-27     9
      2005-03-27     3
      2005-04-25     4
      2005-05-26     5
      2005-06-27     6
      2005-07-26     7

以及

startDate = np.datetime64('2005-02-25')
endDate = np.datetime64('2005-02-26')
aggregate.xs(slice(startDate,endDate),level='date',drop_level = False)

可能产生

                  data
group date            
a     2005-02-25     3
b     2005-02-25     4
      2005-02-26    12
c     2005-01-25     1
      2005-02-25     2
t     2005-01-25     1
      2005-02-25     9
      2005-02-26    12
      2005-02-27     9
      2005-03-27     3
      2005-04-25     4
      2005-05-26     5
      2005-06-27     6
      2005-07-26     7

(在任何人运行该代码段之前,它实际上完全按照预期工作,示例输出是说明性的)

我觉得我一定犯了一个显而易见的错误。 有没有人能解释一下为什么,告诉我在哪里用错了多索引切片?你知道吗


Tags: 数据falsedatadatenpgroup切片slice