如何将一列中最后更改的索引分配给每一行?

时间:2018-09-04 18:29:06

标签: python python-3.x pandas

我有一个DataFrame,其中包含一个大多数为0的列,偶尔还有一些其他整数:

In[160]: df.tail(10)
Out[160]: 
       alert   value
525590     0  46.374
525591     0  46.303
525592     3  46.310
525593     0  46.300
525594     0  46.400
525595     3  46.300
525596     0  46.310
525597     1  46.303
525598     0  46.387
525599     0  46.400

我想添加一个新列,其中包含该列中最后一个非零值的索引:

In[160]: ???.tail(10)
Out[160]: 
       alert   value  change
525590     0  46.374  525585
525591     0  46.303  525585
525592     3  46.310  525592
525593     0  46.300  525592
525594     0  46.400  525592
525595     3  46.300  525595
525596     0  46.310  525595
525597     1  46.303  525597
525598     0  46.387  525597
525599     0  46.400  525597

我知道如何使用显式循环来执行此操作,但是我想知道是否还有更像熊猫的方式来执行此操作。

1 个答案:

答案 0 :(得分:3)

可以使用ffill

g = df.alert.ne(0)
df.loc[g[g].index, 'change'] = g[g].index
df.ffill()

        alert   value   change
525590  0       46.374  NaN
525591  0       46.303  NaN
525592  3       46.310  525592.0
525593  0       46.300  525592.0
525594  0       46.400  525592.0
525595  3       46.300  525595.0
525596  0       46.310  525595.0
525597  1       46.303  525597.0
525598  0       46.387  525597.0
525599  0       46.400  525597.0

请注意,NaN值有所增加,因为我只使用了最后10个项目。在运行整个数据集时应该没问题