我已经积累了计数器,其元素是列表。与先前的行相比,累积每个列表元素。
import pandas as pd
d=pd.DataFrame({'counter': {0: [1,0,2], 1:[1,2,3], 2:[4, 4, 5]}})
我可以使用apply
函数获取maxcounter。
def maxf(x): return max(x.counter)
d['maxcounter']=d.apply(lambda row: maxf(row), axis=1)
现在我还想要字段“max_increment”,获取当前行和前一行之间的差异,然后计算最大值。我们可以使用rolling_apply吗?
预期输出如下。
counter maxcounter increase_max
0 [1, 0, 2] 2 NaN
1 [1, 2, 3] 3 2
2 [4, 4, 5] 5 3
注意:计数器是一个列表,每个元素都从分离的传感器递增。 这不是优化结构,而是我们现在得到的结果。
counter counter_incr increase_max max_incr_index
0 [1, 0, 2]
1 [1, 2, 3] [0, 2, 1] 2 1
2 [4, 4, 5] [3, 2, 2] 3 0
答案 0 :(得分:1)
获取当前行与前一行
之间的差异
由于你的类型不是数字(它是一个列表),似乎最简单的方法是执行一个pd.Series.shift
,然后用一个操作从前一个元素中减去每个元素:
import numpy as np
>>> [(np.array(c) - np.array(p)) \
for c, p in zip(d.counter, d.counter.shift(-1))]
[array([ 0, -2, -1]), array([-3, -2, -2]), array([ nan, nan, nan])]