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()
withto_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())
,但这是一样的。