【问题标题】: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 函数与这些条件结合起来,但老实说我不知道​​该怎么做:(

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: python pandas dataframe nan missing-data


    【解决方案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
    

    【讨论】:

    • 刚刚注意到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'}))
      

      【讨论】:

        猜你喜欢
        • 2021-06-26
        • 1970-01-01
        • 2012-10-25
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        相关资源
        最近更新 更多