SS RR
10.4
12.6
5.6
8.7
我想用先前的值填充空白行。
预期结果:
SS RR
10.4
12.6 10.4
12.6 10.4
12.6 5.6
8.7 5.6
8.7 5.6
我试图先用NaN替换空白值,然后再迭代先前的值:
df[df['SS']==""] = np.NaN
df[df['RR']==""] = np.NaN
df.SS.fillna(method='ffill')
df.RR.fillna(method='ffill')
但是由于某种原因,它对数据框没有任何影响。我在这里想念什么?谢谢!
编辑:
如果我想在相应的“ ID”内ffill
怎么办?
ID SS RR
ABC 10.4
ABC 12.6
ABC
LMN 5.6
LMN 8.7
预期结果:
ID SS RR
ABC 10.4
ABC 12.6 10.4
ABC 12.6 10.4
LMN 5.6
LMN 8.7 5.6
我是否使用groupby
函数以及在何处添加它以使工作正常?再次感谢!
答案 0 :(得分:2)
您应该将其分配回来或添加inplace
df.SS.fillna(method='ffill',inplace=True)
df.RR.fillna(method='ffill',inplace=True)
#df.SS = df.SS.fillna(method='ffill')
#df.RR = df.RR.fillna(method='ffill')
答案 1 :(得分:1)
fillna
不能就地运行。您需要将inplace=True
添加到对fillna
的呼叫中,如另一个答案所示。
或者,您可以重写代码以使用更正后的输出覆盖数据框。
df = df.replace("", np.nan).ffill()
.replace("", np.nan)
将在整个数据框架中将所有空格替换为NaN
.ffill()
是.fillna(method="ffill")
由于我们此处未指定inplace=True
标志,因此我们可以将这些方法链接在一起并覆盖我们的数据框(或通过更改变量名来产生具有这些更改的新数据框:
clean_df = df.replace("", np.nan).ffill()
答案 2 :(得分:1)
您不需要fillna
,您可以直接致电ffill()
:
In [1793]: df[['SS', 'RR']] = df[['SS', 'RR']].ffill()
In [1794]: df
Out[1794]:
SS RR
0 NaN 10.4
1 12.6 10.4
2 12.6 10.4
3 12.6 5.6
4 8.7 5.6