一、初始数据如下,希望分组后,组间数据互不干扰的填充
import pandas as pd
import numpy as np
df = pd.DataFrame({'flag':['one', 'one', 'two', 'two'],
'a':[1, 2, np.nan, 3],
'b':[1, np.nan, 4, np.nan]})
df
Out[2]:
flag a b
0 one 1.0 1.0
1 one 2.0 NaN
2 two NaN 4.0
3 two 3.0 NaN
二、组内用前项填充
df.groupby('flag').fillna(method='ffill')
Out[3]:
a b
0 1.0 1.0
1 2.0 1.0
2 NaN 4.0
3 3.0 4.0
可以看到当组内第1项就是NaN时,第1项不会被填充
三、组内用后项填充
df.groupby('flag').fillna(method='bfill')
Out[4]:
a b
0 1.0 1.0
1 2.0 NaN
2 3.0 4.0
3 3.0 NaN
可以看到当组内最后1项就是NaN时,最后1项不会被填充
四、先前项再后项填充,可以保证组内填充完
df.groupby('flag').fillna(method='ffill').fillna(method='bfill')
Out[5]:
a b
0 1.0 1.0
1 2.0 1.0
2 3.0 4.0
3 3.0 4.0
五、如果只想对b列填值
df["b"] = df.groupby("flag")["b"].fillna(method='ffill')
df
Out[6]:
flag a b
0 one 1.0 1.0
1 one 2.0 1.0
2 two NaN 4.0
3 two 3.0 4.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)