Python 在多索引数据帧上应用重复序列

Python 在多索引数据帧上应用重复序列,python,pandas,numpy,Python,Pandas,Numpy,我有一个多索引数据框,其中最内部的索引可以具有不等的长度,我希望能够添加另一个具有重复值的列,但由于行计数不相等,我无法使用: df['marker'] = np.repeat([0,1,2], len(df), axis = 0) ValueError: Length of values does not match length of index 以下是我的数据帧示例: close date ticker exp

我有一个多索引数据框,其中最内部的索引可以具有不等的长度,我希望能够添加另一个具有重复值的列,但由于行计数不相等,我无法使用:

df['marker'] = np.repeat([0,1,2], len(df), axis = 0)
ValueError: Length of values does not match length of index
以下是我的数据帧示例:

                               close
date    ticker      expiry_dt   
2016-07-27  BHEL    2016-07-28  147
                    2016-08-25  147
                    2016-09-29  150
2016-07-28  BHEL    2016-07-28  149
                    2016-08-25  147
                    2016-09-29  149
2016-07-29  BHEL    2016-08-25  149
                    2016-09-29  149
如您所见,最里面的索引('expirty_dt')的长度不等。我期望的输出是:


我可以通过一个循环来实现这一点,但是我有一个大的数据库,每天这样做循环效率很低。提前感谢您的
np。重复
表达式将生成一个包含
3*len(df)
整数的数组

In [176]: np.repeat([0,1,2],3)
Out[176]: array([0, 0, 0, 1, 1, 1, 2, 2, 2])
In [177]: _.shape
Out[177]: (9,)
有一个不同的中继器

In [178]: np.tile([0,1,2],3)
Out[178]: array([0, 1, 2, 0, 1, 2, 0, 1, 2])
但仍然有一个问题,即总数术语是否正确。

你想知道吗

df.groupby(['date', 'ticker']).cumcount()

是的,我想np.tile就是我想要的。但是,如何克服行数不相等的问题?您想要的是唯一日期的数量,第一列,而不是
close
值的数量。也许
len(df)/3
会起作用。(我是numpy用户,不是pandas,所以我在这里猜测)。我在想,如果在外部索引上使用groupby可以解决这个问题,而不是在其上应用序列。类似于:df['marker']=df.groupby(level=0,group_keys=False)。apply(lambda x:np.arange(0,3))这仍然不起作用,但怀疑这条思路是否正确!