找到pandas DataFram行中的第一个零

2024-04-19 18:19:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,我们称之为a,它看起来像:

enter image description here

我有另一个相同形式的数据帧,但包含不同的数字。我试图用另一个数据帧相同位置的值填充最后一个非零值。我甚至在概念化如何在不遍历每一行、然后遍历该行的每一列以及进行值比较的情况下实现这一点都有困难。有没有其他更好的方法?在


Tags: 数据方法情况数字形式试图用概念化
1条回答
网友
1楼 · 发布于 2024-04-19 18:19:32

如果我没弄错你的问题:

天色已晚,但无论如何我还是要冒险。在

(dfin.ne(0).T[::-1].cumsum().eq(1)[::-1].T*df_2).replace(0,pd.np.nan).combine_first(dfin)

工作原理:

  • 在非零值数据框中查找
  • 转置,这样我就可以倒数非零
  • 使用公式(1)屏蔽除第一个非零值以外的所有其他值 数据名人
  • 颠倒顺序并将其调回原始形状并排序
  • 用NaN代替0。在
  • 乘以df_2得到替换值
  • 最后,首先使用combine_将NaNs替换为dfin值。在

输入:

^{pr2}$

将dfin中每行上的最后一个非零值替换为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  

相关问题 更多 >