做您自己描述的事情并不容易,即
df.sort(['ticker', 'date'], inplace=True)df['diffs'] = df['value'].diff()
然后校正边界:
mask = df.ticker != df.ticker.shift(1)df['diffs'][mask] = np.nan
维护您可能会
idx =df.index在开始时执行的原始索引,然后在结束时可以执行
df.reindex(idx),或者如果它是一个巨大的数据帧,请在
df.filter(['ticker', 'date', 'value'])
然后
join是最后两个数据框。
编辑 :或者,(尽管仍然不使用
groupby)
df.set_index(['ticker','date'], inplace=True)df.sort_index(inplace=True)df['diffs'] = np.nanfor idx in df.index.levels[0]: df.diffs[idx] = df.value[idx].diff()
对于
date ticker value0 63 C 1.651 88 C -1.932 22 C -1.293 76 A -0.794 72 B -1.245 34 A -0.236 92 B 2.437 22 A 0.558 32 A -2.509 59 B -1.01
这将产生:
value diffsticker date A 22 0.55 NaN 32 -2.50 -3.05 34 -0.23 2.27 76 -0.79 -0.56B 59 -1.01 NaN 72 -1.24 -0.23 92 2.43 3.67C 22 -1.29 NaN 63 1.65 2.94 88 -1.93 -3.58



