首页 > 解决方案 > 在 df.loc 过滤条件中填充缺失数据?

问题描述

我在过滤的df中填充nan时遇到以下问题。让我们来看看这个 df :

   condition  value
 0     A       1
 1     B       8
 2     B     np.nan
 3     A     np.nan
 4     C       3
 5     C     np.nan
 6     A       2
 7     B       5
 8     C       4
 9     A     np.nan
10     B     np.nan
11     C     np.nan

如何根据条件用最后一个值的值填充 np.nan,以便得到以下结果?

       condition  value
 0     A       1
 1     B       8
 2     B       8
 3     A       1
 4     C       3
 5     C       3
 6     A       2
 7     B       5
 8     C       4
 9     A       2
10     B       5
11     C       4

我使用以下代码失败了(ValueError:无法使用多维键进行索引):

conditions = set(df['condition'].tolist())

        for c in conditions :

            filter = df.loc[df['condition'] == c]

            df.loc[filter, 'value'] = df.loc[filter, 'value'].fillna(method='ffill')

来自维也纳的 THX 和 BR

标签: pythonpandas

解决方案


如果你的值是实际的NaN,你只需要做一个groupbyon condition,然后调用ffill(它本质上是一个包装器fillna(method='ffill')):

df.groupby('condition').ffill()

返回:

   condition value
0          A     1
1          B     8
2          B     8
3          A     1
4          C     3
5          C     3
6          A     2
7          B     5
8          C     4
9          A     2
10         B     5
11         C     4

如果您的值是字符串np.nan,如您的示例中所示,则在之前替换它们:

df.replace('np.nan', np.nan, inplace=True)

df.groupby('condition').ffill()

推荐阅读