の行の最初のゼロを見つけ、我々は次のようになりますこと、a
と呼ぶことにします。最後の非ゼロ値を他のDataFrameの同じ位置にある値で埋めることを試みています。私は、各行をループし、その行の各列と値の比較を行うことなくこれを行う方法を概念化することさえ問題にしています。これを行うには別の、より良い方法がありますか?私はデータフレームを持っているパンダのデータフレーム
それは遅れているが、私はとにかく刺しを取るつもりです:私が正しくあなたの質問を理解している場合
の行の最初のゼロを見つけ、我々は次のようになりますこと、a
と呼ぶことにします。最後の非ゼロ値を他のDataFrameの同じ位置にある値で埋めることを試みています。私は、各行をループし、その行の各列と値の比較を行うことなくこれを行う方法を概念化することさえ問題にしています。これを行うには別の、より良い方法がありますか?私はデータフレームを持っているパンダのデータフレーム
それは遅れているが、私はとにかく刺しを取るつもりです:私が正しくあなたの質問を理解している場合
。仕組み
(dfin.ne(0).T[::-1].cumsum().eq(1)[::-1].T*df_2).replace(0,pd.np.nan).combine_first(dfin)
:データフレーム
入力:
print(dfin)
2017-05-31 2017-06-30 2017-07-31 2017-08-31 2017-09-30 \
560101 7910.0 0.0 0.0 0.0 0.0
364672 7457.0 4656.0 5778.0 1482.0 2906.0
786073 2201.0 0.0 0.0 0.0 0.0
437551 3063.0 5975.0 7518.0 0.0 0.0
343474 3263.0 3559.0 8417.0 1024.0 0.0
742817 6997.0 2192.0 6550.0 8410.0 7804.0
197776 2177.0 8532.0 4019.0 3373.0 2529.0
262179 8696.0 4426.0 0.0 0.0 0.0
867695 6766.0 4775.0 7633.0 4556.0 8619.0
266410 3385.0 1746.0 4360.0 1561.0 9184.0
2017-10-31 2017-11-30 2017-12-31 2018-01-31 2018-02-28
560101 0.0 0.0 0.0 0.0 0.0
364672 3541.0 3078.0 9971.0 0.0 0.0
786073 0.0 0.0 0.0 0.0 0.0
437551 0.0 0.0 0.0 0.0 0.0
343474 0.0 0.0 0.0 0.0 0.0
742817 4009.0 7788.0 9376.0 0.0 0.0
197776 5658.0 7246.0 7403.0 3186.0 2669.0
262179 0.0 0.0 0.0 0.0 0.0
867695 2867.0 0.0 0.0 0.0 0.0
266410 0.0 0.0 0.0 0.0 0.0
print(df_2) #replacement values datafame
2017-05-31 2017-06-30 2017-07-31 2017-08-31 2017-09-30 \
560101 9999 9999 9999 9999 9999
364672 9999 9999 9999 9999 9999
786073 9999 9999 9999 9999 9999
437551 9999 9999 9999 9999 9999
343474 9999 9999 9999 9999 9999
742817 9999 9999 9999 9999 9999
197776 9999 9999 9999 9999 9999
262179 9999 9999 9999 9999 9999
867695 9999 9999 9999 9999 9999
266410 9999 9999 9999 9999 9999
2017-10-31 2017-11-30 2017-12-31 2018-01-31 2018-02-28
560101 9999 9999 9999 9999 9999
364672 9999 9999 9999 9999 9999
786073 9999 9999 9999 9999 9999
437551 9999 9999 9999 9999 9999
343474 9999 9999 9999 9999 9999
742817 9999 9999 9999 9999 9999
197776 9999 9999 9999 9999 9999
262179 9999 9999 9999 9999 9999
867695 9999 9999 9999 9999 9999
266410 9999 9999 9999 9999 9999
df_2から同じ位置の値とdfinの各行に最後の非ゼロ値を交換します。
(dfin.ne(0).T[::-1].cumsum().eq(1)[::-1].T*df_2).replace(0,pd.np.nan).combine_first(dfin)
出力:
2017-05-31 2017-06-30 2017-07-31 2017-08-31 2017-09-30 \
560101 9999.0 0.0 0.0 0.0 0.0
364672 7457.0 4656.0 5778.0 1482.0 2906.0
786073 9999.0 0.0 0.0 0.0 0.0
437551 3063.0 5975.0 9999.0 0.0 0.0
343474 3263.0 3559.0 8417.0 9999.0 0.0
742817 6997.0 2192.0 6550.0 8410.0 7804.0
197776 2177.0 8532.0 4019.0 3373.0 2529.0
262179 8696.0 9999.0 0.0 0.0 0.0
867695 6766.0 4775.0 7633.0 4556.0 8619.0
266410 3385.0 1746.0 4360.0 1561.0 9999.0
2017-10-31 2017-11-30 2017-12-31 2018-01-31 2018-02-28
560101 0.0 0.0 0.0 0.0 0.0
364672 3541.0 3078.0 9999.0 0.0 0.0
786073 0.0 0.0 0.0 0.0 0.0
437551 0.0 0.0 0.0 0.0 0.0
343474 0.0 0.0 0.0 0.0 0.0
742817 4009.0 7788.0 9999.0 0.0 0.0
197776 5658.0 7246.0 7403.0 3186.0 9999.0
262179 0.0 0.0 0.0 0.0 0.0
867695 9999.0 0.0 0.0 0.0 0.0
266410 0.0 0.0 0.0 0.0 0.0
私の質問はひどく、これはまさに私が探していたものです。もし私ができるなら、私は10倍upvoteします。私は迅速に実装してみましょう、私はそれが動作することを知っていると答えた印を付けます。 – Kyle
これはあなたが1)代表コードと2の少ない量を生成することを実行可能な例を提供した場合に答えるためにはるかに容易に問題になりますが)あなたはすでに試したものを実証しました。 –
フィードバック@ PaulHを高く評価します。私は明日の朝にこれに追加します。 – Kyle