Cap*_*pet 2 python numpy pandas
我想在列中填充缺少的(NaN)值,其值取决于最后的非= NaN值.我的数据看起来像这样:
In [3]: A = pd.DataFrame(['X', np.nan, np.nan, 'Y',np.nan, np.nan, 'X', np.nan])
In [4]: A
Out[4]:
0
0 X
1 NaN
2 NaN
3 Y
4 NaN
5 NaN
6 X
7 NaN
Run Code Online (Sandbox Code Playgroud)
我知道这个fillna功能,但这不是我想做的.这给了我以下内容:
In [5]: A.fillna(method='ffill') # Not what I want to do
Out[5]:
0
0 X
1 X
2 X
3 Y
4 Y
5 Y
6 X
7 X
Run Code Online (Sandbox Code Playgroud)
例如,如果最后一个值是'X',我想填写'I',如果最后一个值是'Y',我想填写'J'.即
Out[5]: # How do I get this?
0
0 X
1 I
2 I
3 Y
4 J
5 J
6 X
7 I
Run Code Online (Sandbox Code Playgroud)
我确信我可以用循环来做到这一点,但是如何在不诉诸于此的情况下做到这一点?
您可以创建将前一个值映射到所需填充值的字典,然后使用fillnaDataFrame的前向填充版本,并使用replace和应用映射ffill:
nan_map = {'X': 'I', 'Y': 'J'}
A = A.fillna(A.replace(nan_map).ffill())
Run Code Online (Sandbox Code Playgroud)
结果输出:
0
0 X
1 I
2 I
3 Y
4 J
5 J
6 X
7 I
Run Code Online (Sandbox Code Playgroud)