我有一个pandas DataFrame,是这样的,我想用这样的方式来填充缺失的值:如果年份是<2010,我想用'手动'来填充NaN,如果年份是>=2010,我想用'手动'来填充NaN。
year = [2015, 2016, 2009, 2000, 1998, 2017, 1980, 2016, 2015, 2015]
mode = ["automatic", "automatic", "manual", "manual", np.nan,'automatic', np.nan, 'automatic', np.nan, np.nan]
X = pd.DataFrame({'year': year, 'mode': mode})
print(X)
year mode
0 2015 automatic
1 2016 automatic
2 2009 manual
3 2000 manual
4 1998 NaN
5 2017 automatic
6 1980 NaN
7 2016 automatic
8 2015 NaN
9 2015 NaN
我想用这样的条件来填充缺失的值:如果年份是<2010,我想用 "手动 "来填充NaN,如果年份是>=2010,我想用 "自动 "来填充NaN值。
我想过组合.groupby函数与这些条件,但我不知道诚实地如何做:(
我将感激任何帮助。
和我对你的回答类似的方法 其他问题:
cond = X['year'] < 2010
X['mode'] = X['mode'].fillna(cond.map({True:'manual', False: 'automatic'}))
有 np.where
和 fillna
s=pd.Series(np.where(X.year<2010,'manual','automatic'),index=X.index)
X['mode'].fillna(s,inplace=True)
X
Out[192]:
year mode
0 2015 automatic
1 2016 automatic
2 2009 manual
3 2000 manual
4 1998 manual
5 2017 automatic
6 1980 manual
7 2016 automatic
8 2015 automatic
9 2015 automatic
您可以使用 np.where
X['mode'] = X['mode'].fillna(pd.Series(np.where(X['year'] >= 2010, 'automatic', 'manual')))
产量
year mode
0 2015 automatic
1 2016 automatic
2 2009 manual
3 2000 manual
4 1998 manual
5 2017 automatic
6 1980 manual
7 2016 automatic
8 2015 automatic
9 2015 automatic