我正在尝试通过数据帧进行迭代。我的目标是在loop
列中前一行和实际行不相等时增加列rpm
中的值。
df = pd.DataFrame({'rpm': [5000, 5000, 10000, 10000, 15000, 15000],
'temp': [23, 23, 24, 23, 24, 25]})
df['loop'] = 0
def loop_no(x,y):
if x.rpm != y.rpm:
val = y.loop + 1
else:
val = x.loop
return val
df['loop'] = df.apply(lambda x: loop_no(x, x.shift(-1)))
此时,我收到此错误:
AttributeError: ("'Series' object has no attribute 'rpm'", u'occurred at index rpm').
当我使用axis=1
时,我没有收到错误。但显然它会在列方向上转移。所以,我没有得到上一行。
df['loop'] = df.apply(lambda x: loop_no(x, x.shift(-1)), axis=1)
答案 0 :(得分:1)
IIUC
(df.rpm!=df.rpm.shift(-1)).cumsum()
Out[796]:
0 0
1 1
2 1
3 2
4 2
5 3
Name: rpm, dtype: int32
更多信息
df['loop']=(df.rpm!=df.rpm.shift(-1)).cumsum()
df
Out[799]:
rpm temp loop
0 5000 23 0
1 5000 23 1
2 10000 24 1
3 10000 23 2
4 15000 24 2
5 15000 25 3