如何用条件填充缺失值?
Posted
技术标签:
【中文标题】如何用条件填充缺失值?【英文标题】:How to fill missing values with conditions? 【发布时间】:2020-10-02 08:16:15 【问题描述】:我有一个这样的熊猫数据框:
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 值
我考虑过将 .groupby 函数与这些条件结合起来,但老实说我不知道该怎么做:(
如果有任何帮助,我将不胜感激。
【问题讨论】:
【参考方案1】:与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
【讨论】:
刚刚注意到s
不能是数组。很奇怪。
@timgeb 索引问题~ :-)【参考方案2】:
您可以使用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
【讨论】:
【参考方案3】:我对您的other question 的回答与我类似的方法:
cond = X['year'] < 2010
X['mode'] = X['mode'].fillna(cond.map(True:'manual', False: 'automatic'))
【讨论】:
以上是关于如何用条件填充缺失值?的主要内容,如果未能解决你的问题,请参考以下文章
如何用 NA 以外的值填充 merge(..., all = TRUE, ...) 中的缺失值?