如何用条件来填充缺失的值?

问题描述 投票:1回答:1

我有一个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函数与这些条件,但我不知道诚实地如何做:(

我将感激任何帮助。

python pandas dataframe nan missing-data
1个回答
2
投票

和我对你的回答类似的方法 其他问题:

cond = X['year'] < 2010
X['mode'] = X['mode'].fillna(cond.map({True:'manual', False: 'automatic'}))

1
投票

np.wherefillna

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

0
投票

您可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.