我有一个熊猫系列,我想填补最后一个不是南的值。例如,
a=pd.Series({1: 1918, 2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831})
Out[113]:
1 1918
2 1928
3 NaN
4 NaN
5 NaN
6 1853
7 1831
dtype: float64
我想要的是以下内容:
a=pd.Series({1: 1918,
2: 1928,
3: np.nan,
4: np.nan,
5: 1928,
6: 1853,
7: 1831})
有优雅的方法吗?我试着看看fillna,但它没有我想要的这个选项。它将用1928填充值3或用1853填充值5(使用limit = 1),但这不是我要找的。最终目标是根据此数据执行返回系列,当值为nan时,使用最后一个非nan的可用数据。所以一个新的回归系列应该给出现货6,1853 /1928 -1。
答案 0 :(得分:1)
您可以按isnull
和shift
创建模板,然后使用loc
和fillna
:
import pandas as pd
import numpy as np
a=pd.Series({1: 1918, 2: 1928, 3: np.nan, 4: np.nan, 5: np.nan, 6: 1853, 7: 1831})
print a
1 1918
2 1928
3 NaN
4 NaN
5 NaN
6 1853
7 1831
dtype: float64
print ~(pd.isnull(a) & pd.isnull(a.shift(-1)))
1 True
2 True
3 False
4 False
5 True
6 True
7 True
dtype: bool
a.loc[ ~(pd.isnull(a) & pd.isnull(a.shift(-1)))] = a.fillna(method='ffill')
print a
1 1918
2 1928
3 NaN
4 NaN
5 1928
6 1853
7 1831
dtype: float64