私はPythonの新機能で、条件付きで値をオフセットする方法に固執しています。私は、新しい列を作成するだけでシフト機能を使用することができました。しかし、これは関数では機能しないようです。レコードが条件を満たしていれば、Python offsetカラムの値が前のレコードの値となります
オリジナルDF:
BEGIN SPEED SPEED_END
322 28 0
341 0 23
496 5 1
500 0 0
775 0 0
979 0 0
1015 0 0
1022 0 14
1050 11 6
私は、レコードSPEED=0
と以前SPEED_END=0
に前のレコードSPEED
値に変更する前のレコードBEGIN
値とSPEED
値に変更するBEGIN
値を求めています。
したがって、上記の表には、次のようになります。私は別の多くのことを試してみた
BEGIN SPEED SPEED_END
322 28 0
322 28 23
496 5 1
500 0 0
500 0 0
500 0 0
500 0 0
500 0 14
1050 11 6
。
def cont(row,param):
if row['SPEED'] == 0 and row['SPEED_END'].shift(1) == 0:
val = row[param].shift(1)
else:
val = row[param]
return val
df['BEGIN'] = df.apply(cont, param='BEGIN', axis=1)
をしかし、これは私にエラー与える::現在、私が試したの任意の提案が高く評価され
AttributeError: ("'float' object has no attribute 'shift'", u'occurred at index 0')
を!
ありがとう!これは作業に非常に近いです!私は元のポストにいくつかの詳細とデータ行を追加しました。私はそれをループする必要があり、それがBEGINを変更し、次のレコードが同じ条件を満たしていれば、そのBEGINを以前に更新されたBEGINに更新する。私はこれが理にかなってほしい。 – Amber
私はリピートのための答えを更新しました。 – root
完璧に動作します!本当にありがとう!! – Amber