在df.loc过滤条件下填充缺少的数据?

时间:2018-07-03 18:22:46

标签: python pandas

我在将nan填充到过滤的df中时遇到以下问题。 让我们来看看这个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

1 个答案:

答案 0 :(得分:3)

如果您的值是实际的NaN,则只需对groupby做一个condition,然后调用ffill(实际上是{{1的包装}}):

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