问题描述
这就是我所拥有的:
df=pd.DataFrame({'A':[1,2,3,4,5],'B':[6,np.nan,np.nan]})
A B
0 1 6.0
1 2 NaN
2 3 NaN
3 4 3.0
4 5 NaN
我想将 B 的非缺失值扩展到 B 下面的缺失值,所以我有:
A B C
0 1 6.0 6.0
1 2 NaN NaN
2 3 NaN NaN
3 4 3.0 3.0
4 5 NaN NaN
我试过这样的事情,昨晚奏效了:
for i in df.index:
df['C'][i]=np.where(pd.isnull(df['B'].iloc[i]),df['C'][i-1],df.B.iloc[i])
但是当我今天早上醒来时,它说它无法识别“C”。我无法确定它在什么条件下起作用和不起作用。
谢谢!
解决方法
您可以使用 pandas fillna()
方法用最后一个非空值向前填充缺失值。有关详细信息,请参阅 pandas documentation。
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': [1,2,3,4,5],'B': [6,np.nan,np.nan]
})
df['C'] = df['B'].fillna(method='ffill')
df
# A B C
# 0 1 6.0 6.0
# 1 2 NaN 6.0
# 2 3 NaN 6.0
# 3 4 3.0 3.0
# 4 5 NaN 3.0