【问题标题】:How to drop NaN from one column according to another columns specific value如何根据另一列的特定值从一列中删除 NaN
【发布时间】:2021-01-26 17:49:27
【问题描述】:

无法弄清楚如何根据另一列特定值从特定列中删除 NaN 值。 部分DataFrame(df):

            vol.            group
1186      10,448,898          1
1187      nan                 0
1188      35,047,520          1
          ...   
8329      130,703             0
8330      241,489             1
8332      nan                 1
8333      101,142             0
8334      nan                 1

我需要从 vol. 中删除 nan 值,但前提是 group 中的值是 1

我试过了:

df.loc[df['group'] == 1,'vol.'].dropna(inplace=True)

df 仍然具有所有值,因为 dropna 无效。

【问题讨论】:

    标签: python pandas dataframe nan drop


    【解决方案1】:

    您可以更改逻辑 - 在boolean indexing 中选择所有没有1nans 的值:

    #if necessary convert strings nan to missing values `NaN`s
    df['vol.'] = df['vol.'].replace('nan', np.nan)
    
    
    df = df[(df['group'] != 1) | df['vol.'].notna()]
    print (df)
                vol.  group
    1186  10,448,898      1
    1187         NaN      0
    1188  35,047,520      1
    8329     130,703      0
    8330     241,489      1
    8333     101,142      0
    

    【讨论】:

      【解决方案2】:

      使用这个:

      df = df.loc[df['group'] == 1,'vol.']
      df.dropna(inplace=True)
      

      【讨论】:

      • 虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并将这些知识应用到他们自己的代码中。解释代码时,您也可能会以赞成票的形式从用户那里获得积极的反馈。