繁体   English   中英

向前填充python pandas数据帧中除最后一个值之外的所有内容

[英]Forward fill all except last value in python pandas dataframe

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

columns = ['a', 'b', 'c']
for column in columns:
    df[column].fillna(method='ffill', inplace=True)

...但是因为列中的系列长度不同,所以在其中一些的末端留下填充值的长尾。 因为某些系列中的差距非常大,所以我不能使用 fillna 的限制参数,而不会在系列上留下填充值的长尾。

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

您可以在 lambda 函数中使用last_valid_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM