Замена значения NAN в кадре данных pandas из значений в других записях той же группы - PullRequest
4 голосов
/ 10 мая 2019

У меня есть датафрейм df

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [np.nan, 1, 2,np.nan,2,np.nan,np.nan], 
               'B': [10, np.nan, np.nan,5,np.nan,np.nan,7], 
               'C': [1,1,2,2,3,3,3]})

, который выглядит как:

     A     B  C
0  NaN  10.0  1
1  1.0   NaN  1
2  2.0   NaN  2
3  NaN   5.0  2
4  2.0   NaN  3
5  NaN   NaN  3
6  NaN   7.0  3

Я хочу заменить все значения NAN в столбце A и B на значения из других записей, относящихся к той же группе, как указано в столбце C.

Мой ожидаемый результат:

     A     B   C
0  1.0   10.0  1
1  1.0   10.0  1
2  2.0    5.0  2
3  2.0    5.0  2
4  2.0    7.0  3
5  2.0    7.0  3
6  2.0    7.0  3

Как я могу сделать то же самое в pandas dataframe?

1 Ответ

3 голосов
/ 10 мая 2019

Использовать GroupBy.apply с пропущенными значениями прямого и обратного заполнения:

df[['A','B']] = df.groupby('C')['A','B'].apply(lambda x: x.ffill().bfill())
print (df)

     A     B  C
0  1.0  10.0  1
1  1.0  10.0  1
2  2.0   5.0  2
3  2.0   5.0  2
4  2.0   7.0  3
5  2.0   7.0  3
6  2.0   7.0  3
...