5
私はこのような2列のパンダのデータフレームがあります。同じ列の以前の値に基づいて列の値をベクトル化して計算しますか?
df = pd.DataFrame(data={'A': [10, 2, 3, 4, 5, 6], 'B': [0, 1, 2, 3, 4, 5]})
>>> df
A B
0 10 0
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
私は次のように新しい列Cを作成したい: C [i]は= C [I-1] -A [I]を仕事をしていません
df['C'] = df['A']
for i in range(1, len(df)):
df['C'][i] = df['C'][i-1] - df['A'][i] + df['B'][i]
>>> df
A B C
0 10 0 10
1 2 1 9
2 3 2 8
3 4 3 7
4 5 4 6
5 6 5 5
:+ B [i]はこのquestionで
を答えは、このようなループの使用を提案しています。
しかし、ループは一般にベクトル化された計算に比べて遅いので、私はパンダにベクトル化された解決策があるかどうか疑問に思っていました。 (これがこの新しい質問の理由です)。
私はこの
df['C'] = df['C'].shift(1).fillna(df['A']) - df['A'] + df['B']
のようなシフト方式を使用しようとしたが、シフトC列が計算で更新されていないので、それは助けにはなりませんでした。
>>> df['C'].shift(1).fillna(df['A'])
0 10
1 10
2 2
3 3
4 4
5 5
これは間違った結果をもたらします。
Thanks @ Happy001それはまた、将来のための有用な教訓です:あなたが立ち往生した場合は、代数を行い、あなたの問題を再考してください。 – dimyG