0
私はデータフレームを反復しようとしています。私の目標は、列loop
の値を、前の行であるrpm
の列と実際の行が等しくないときに増やすことです。この時点でシフト関数と組み合わせてapply関数を使用する
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)))
、私はこのエラーを取得する:私はaxis=1
を使用する場合
AttributeError: ("'Series' object has no attribute 'rpm'", u'occurred at index rpm').
、私はエラーを得ることはありません。しかし明らかに列方向にシフトします。だから、私は前の行を取得しません。答えを
df['loop'] = df.apply(lambda x: loop_no(x, x.shift(-1)), axis=1)
感謝。それは素晴らしい作品です。しかし、なぜ私の方法がうまくいかないのか分かりません。私のように反復することはできないのですか? @StephanF。 –
。 applyは行を基底としています。つまり、関数が1つの車線データを受け取るたびに、ここにシフトがありません。またはそのシフトは常にNaNになります。関数のようなものが必要な場合は、 'for loop'と考えることができます – Wen
これは明らかにします。私は非常に遅いので、iteritemsを避けようとしました。 –