Заполнение пропущенных данных в условиях фильтрации df.loc? - PullRequest
0 голосов
/ 03 июля 2018

У меня следующая проблема с заполнением 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 голосов
/ 03 июля 2018

Если ваши значения действительны NaN, вам просто нужно сделать groupby для 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...