Python で Pandas を学び始めて約 3 日が経ち、私を困惑させた最初の問題に遭遇しました。処理中のテーブルの各行を反復処理する必要がないため、必要なさまざまな計算を実行できましたが、次の問題で同じことを行う方法があるかどうかはわかりません。
私が作業しようとしているテーブルは、この問題の目的のために 2 列のみに要約できます。最初の列は「日付」、2 番目の列は「順序」です。「順序」列の値は、ほとんどが 0 で、いくつかの 1 と -1 が点在しています。私の質問でそれを示す方法がわかりませんが、次のようなもの...
Date Order
0 2017-03-15 0
1 2017-03-14 1
2 2017-03-13 0
3 2017-03-12 0
4 2017-03-11 -1
5 2017-03-10 0
6 2017-03-09 0
7 2017-03-08 1
最初は「注文」列に基づいていますが、「注文」列の値に応じて「ステータス」列にもある「ステータス」と呼ばれる別の列を追加します。
Excel のステータス列に数式を追加すると、次のようになります。 =if(order = 1, 1, if(order = -1, -1, status[from row-1]))
したがって、結果のテーブルは次のようになります。
Date Order Status
0 2017-03-15 0 0
1 2017-03-14 1 1
2 2017-03-13 0 1
3 2017-03-12 0 1
4 2017-03-11 -1 -1
5 2017-03-10 0 -1
6 2017-03-09 0 -1
7 2017-03-08 1 1
ステータス列は、最初の分類の後、1 または -1 のみで終わる必要があります (ただし、それまでは 0 から始まる場合があります)。順序列は通常、1 と -1 を交互に繰り返します (点在する 0 を除く) が、順序列に 1 があり、次の行または数行の後に別の 1 が続くこともあります。 -1 の前。これは無視できる入力データ エラーですが、コードでそれを考慮する必要がある場合があります。
現在 Pandas を使用していますが、必要に応じて numpy を使用することもできます。
うまくいけば、それは十分に明らかです。下手なフォーマットはご容赦ください。そして救いの手をありがとう。
組み合わせmask
、ffill
およびfillna
o = df.Order
df.assign(Status=o.mask(o == 0).ffill().fillna(o).astype(int))
Date Order Status
0 2017-03-15 0 0
1 2017-03-14 1 1
2 2017-03-13 0 1
3 2017-03-12 0 1
4 2017-03-11 -1 -1
5 2017-03-10 0 -1
6 2017-03-09 0 -1
7 2017-03-08 1 1
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加