我有一个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
我知道如何使用显式循环来执行此操作,但是我想知道是否还有更像熊猫的方式来执行此操作。
答案 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个项目。在运行整个数据集时应该没问题