水平(沿行)向前填充 Pandas 数据框,而不向前填充每行中的最后一个值

Foj*_*ojo 5 python numpy pandas

我有一个 Pandas 数据框,我想水平转发填充,但我不想转发填充超过每行中的最后一个条目。这是一些已停产的产品的时间序列定价数据,因此我不希望将记录的最后一个值向前填充到当前值。

FWDFILL.apply(lambda series: series.iloc[:,series.last_valid_index()].ffill(axis=1))
Run Code Online (Sandbox Code Playgroud)

^我包含的代码做了我想要的,但它是垂直的。这可能可以帮助人们作为起点。

>>> print(FWDFILL)

1      1     NaN     NaN     2     NaN  
2     NaN     1      NaN     5     NaN  
3     NaN     3       1     NaN    NaN  
4     NaN    NaN     NaN    NaN    NaN  
5     NaN     5      NaN    NaN     1  
Run Code Online (Sandbox Code Playgroud)

期望输出:

1      1      1      1     2     NaN  
2     NaN     1      1     5     NaN  
3     NaN     3      1    NaN    NaN  
4     NaN    NaN    NaN   NaN    NaN  
5     NaN     5      5     5      1
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 4

IIUC,您需要apply使用axis=1,因此您要应用于数据帧行而不是数据帧列。

df.apply(lambda x: x[:x.last_valid_index()].ffill(), axis=1)
Run Code Online (Sandbox Code Playgroud)

输出:

     1    2    3    4    5
0                         
1  1.0  1.0  1.0  2.0  NaN
2  NaN  1.0  1.0  5.0  NaN
3  NaN  3.0  1.0  NaN  NaN
4  NaN  NaN  NaN  NaN  NaN
5  NaN  5.0  5.0  5.0  1.0
Run Code Online (Sandbox Code Playgroud)