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))这仍然不起作用,但怀疑这条思路是否正确!