Python 向前填充数据帧中除最后一个值以外的所有值

Python 向前填充数据帧中除最后一个值以外的所有值,python,pandas,Python,Pandas,我在pandas中有一个数据框,其中有几列我想向前填充值。目前我正在做: columns = ['a', 'b', 'c'] for column in columns: df[column].fillna(method='ffill', inplace=True) …但由于列中的序列长度不同,因此在其中一些列的末端会留下填充值的长尾巴。因为某些序列中的间隙相当大,所以如果不在序列中留下填充值的长尾巴,我就不能使用fillna的limit参数 除了最后一个值外,是否可以向前填充每列中的

我在pandas中有一个数据框,其中有几列我想向前填充值。目前我正在做:

columns = ['a', 'b', 'c']
for column in columns:
    df[column].fillna(method='ffill', inplace=True)
…但由于列中的序列长度不同,因此在其中一些列的末端会留下填充值的长尾巴。因为某些序列中的间隙相当大,所以如果不在序列中留下填充值的长尾巴,我就不能使用fillna的limit参数


除了最后一个值外,是否可以向前填充每列中的值?谢谢

您可以在lambda函数中使用
last\u valid\u index
来填充到该点

df = pd.DataFrame({
    'A': [1, None, None, None], 
    'B': [1, 2, None, None], 
    'C': [1, None, 3, None], 
    'D': [1, None, None, 4]})

>>> df
    A   B   C   D
0   1   1   1   1
1 NaN   2 NaN NaN
2 NaN NaN   3 NaN
3 NaN NaN NaN   4

>>> df.apply(lambda series: series.loc[:series.last_valid_index()].ffill())
    A   B   C  D
0   1   1   1  1
1 NaN   2   1  1
2 NaN NaN   3  1
3 NaN NaN NaN  4

除了Alexander给出的答案外,如果您想使用
NaNs
保留底部行,还可以使用以下选项:

df2 = pd.DataFrame({
    'A': [1, None, None, None, None], 
    'B': [1, 2, None, None, None], 
    'C': [1, None, 3, None, None], 
    'D': [1, None, None, 4, None]})

df2
    A   B   C   D
0   1   1   1   1
1 NaN   2 NaN NaN
2 NaN NaN   3 NaN
3 NaN NaN NaN   4
4 NaN NaN NaN NaN

pd.concat([df2.apply(lambda series: series.loc[:series.last_valid_index()].ffill()),
           df2.loc[df2.last_valid_index()+1:]])

    A   B   C   D
0   1.0 1.0 1.0 1.0
1   NaN 2.0 1.0 1.0
2   NaN NaN 3.0 1.0
3   NaN NaN NaN 4.0
4   NaN NaN NaN NaN

我认为可以使用一个掩码,其中包括最后一个
NaN
之前要填充的所有值,但请提供一个示例数据集来使用好吗?