0
我有一個數據幀的排第一個零,我們稱之爲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
我的問題很糟糕,而這正是我一直在尋找的。如果可以的話,我會加倍投票。讓我快速實施,一旦知道它的工作原理,我就會做出回答。 – Kyle
這將是一個很容易回答的問題,如果你提供了一個可運行的例子:1)產生的代表較少代碼量和2)證明你已經嘗試過什麼。 –
我很欣賞@PaulH的反饋。明天早上我會補充一點。 – Kyle