好容易重现的例子!更多问题应该是这样!
只需传递一个lambda进行转换(这等同于直接传递函数对象,例如直接传递np.diff(或Series.diff)。因此,这等效于data1 / data2
In [32]: data3['diffs'] = data3.groupby('ticker')['value'].transform(Series.diff)In [34]: data3.sort_index(inplace=True)In [25]: data3Out[25]: date ticker value diffs0 2013-10-03 ticker_2 0.435995 0.0156271 2013-10-04 ticker_2 0.025926 -0.4100692 2013-10-02 ticker_1 0.549662 NaN3 2013-10-01 ticker_0 0.435322 NaN4 2013-10-02 ticker_2 0.420368 0.1207135 2013-10-03 ticker_0 0.330335 -0.2889366 2013-10-04 ticker_1 0.204649 -0.3450147 2013-10-02 ticker_0 0.619271 0.1839498 2013-10-01 ticker_2 0.299655 NaN[9 rows x 4 columns]我相信这
np.diff不会遵循numpy自己的unfunc准则来处理数组输入(从而尝试各种方法来强制输入并发送输出,例如
__array__,
__array_wrap__基于输出的输入)。我不太确定为什么,请在此处查看更多信息。因此,最重要的
np.diff是无法正确处理索引并自行计算(在这种情况下是错误的)。
Pandas有很多方法,它们不仅仅调用numpy函数,主要是因为它们处理不同的dtypes,处理nans,并且在这种情况下,处理“特殊”差异。例如,您可以将时间频率传递给datelike-
index,在此它可以计算实际求差n的数量。



