Python 寻找类似于DataFrame.nafill()的函数

Python 寻找类似于DataFrame.nafill()的函数,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我想应用一个类似于fillna()的函数,但其值与nan不同。不幸的是,DataFrame.replace()在我的情况下不起作用。下面是一个示例:给定一个数据帧: df = pd.DataFrame([[1,2,3],[4,-1,-1],[5,6,-1]]) 0 1 2 0 1 2.0 3.0 1 4 -1.0 -1.0 2 5 6.0 -1.0 3 7 8.0 NaN 我正在寻找一个函数,该函数将输出:

我想应用一个类似于
fillna()
的函数,但其值与nan不同。不幸的是,
DataFrame.replace()
在我的情况下不起作用。下面是一个示例:给定一个数据帧:

    df = pd.DataFrame([[1,2,3],[4,-1,-1],[5,6,-1]])

       0    1    2
    0  1  2.0  3.0
    1  4 -1.0 -1.0
    2  5  6.0 -1.0
    3  7  8.0  NaN
我正在寻找一个函数,该函数将输出:

       0    1    2
    0  1  2.0  3.0
    1  4  2.0  3.0
    2  5  6.0  3.0
    3  7  8.0  NaN

因此
df.replace()
with
to_replace=-1
'method='ffill'
将不起作用,因为它需要一个独立于列的
值来替换-1项。在我的示例中,它依赖于列。我知道我可以用循环编码,但我正在寻找一个高效的代码,因为它将应用于大型数据帧。有什么建议吗?谢谢。

您只需将该值替换为
NaN
,然后调用
ffill

In [3]:

df.replace(-1, np.NaN).ffill()
Out[3]:
   0  1  2
0  1  2  3
1  4  2  3
2  5  6  3
我觉得你想得太多了

编辑

如果已经有
NaN
值,则创建一个布尔掩码,并在掩码的反面使用
ffill
再次更新这些元素:

In [15]:    
df[df == -1] = df[df != -1].ffill()
df

Out[15]:
   0  1   2
0  1  2   3
1  4  2   3
2  5  6   3
3  7  8 NaN
另一种方法(感谢注释中的@DSM)是使用
where
基本上完成与上述相同的工作:

In [17]:
df.where(df != -1, df.replace(-1, np.nan).ffill())

Out[17]:
   0  1   2
0  1  2   3
1  4  2   3
2  5  6   3
3  7  8 NaN

如果您将-1替换为nan,然后将其填充,您的示例似乎会起作用。你能举个例子吗?是的,如果数据帧中混合了-1和nan。我将为该案例添加编辑添加它@DSM,请查看编辑后的问题。谢谢。不幸的是,如果原始Dataeframe中除了-1条目之外还有NAN,那么这将不起作用。我将进行编辑以显示一个示例。请参阅更新的答案,该答案适用于您修改的示例谢谢@EdChum,请参阅编辑问题中的示例。我相信你编辑的解决方案不适合我的想法。我不需要“跳过”南。我对nan之后的内容不感兴趣。它仍然适用于您的示例df,请参阅更新的回答。我可能会将其写成
df.where(df!=-1,df.replace(-1,np.nan).ffill())
,但这是一样的。