如何根据另一列的特定值从一列中删除 NaN

问题描述

无法弄清楚如何根据另一列特定值从特定列中删除 NaN 值。 数据帧的一部分(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 不起作用。

解决方法

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

#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
,

使用这个:

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