0
我需要在时间t计算DataFrame中的一个值,它涉及时间t和t-1的值。在直的Python,我会压缩在一起的两个长度为n-1的列表的fraagments,像这样:如何执行涉及多行数值的计算?
>>> x = [random.random() for _ in range(10)]
>>> x
[0.09154030286701986, 0.7695293091436095, 0.003169617773302602, 0.18746852585939167, 0.16382872408720617, 0.951061080433954, 0.2880246300316386, 0.2585431567171105, 0.40819533123361884, 0.9482919441157496]
>>> [(a - b) for (a, b) in zip(x[:-1], x[1:])]
[-0.6779890062765896, 0.7663596913703069, -0.18429890808608906, 0.023639801772185498, -0.7872323563467478, 0.6630364504023154, 0.029481473314528106, -0.14965217451650836, -0.5400966128821307]
然后处理该边缘适当情况下。
有没有类似的习语用DataFrames?
让我补充一点,这个明显的(对我来说)模拟没有做什么,我会期待它:
In [321]: x
Out[321]:
r1 r2
0 -1.059815 -1.159293
1 2.393336 0.458090
2 0.055295 1.389807
3 -0.102741 -0.126111
4 1.242702 -1.846763
5 -0.115352 -0.051099
6 -1.676272 1.117046
7 -0.404109 0.139790
In [322]: x["r1"][:-1] - x["r2"][1:]
Out[322]:
0 NaN
1 1.935245
2 -1.334512
3 0.023370
4 3.089465
5 -0.064253
6 -2.793318
7 NaN
dtype: float64
我预期的-1.059815结果 - 0.458090是在第一位置,不是NaN。
In [325]: [a-b for (a, b) in zip(list(x["r1"])[:-1], list(x["r2"])[1:])]
Out[325]:
[-1.5179054299355403,
1.0035286021021981,
0.1814061862111446,
1.7440218133011343,
1.2938016423931689,
-1.2323982743162547,
-1.8160616387411936]
很酷,谢谢。与基本的Python数据结构相比,这些对象的API是巨大的,它为采用创造了相当高的障碍。它看起来像Series实例有214个公共属性。相比之下,Python列表有9个。 – smontanaro