Метод fillna
Метод fillna класса GroupBy применяется к сгруппированным данным и заполняет пропущенные значения внутри каждой группы. Метод принимает параметр value или method, определяющий способ заполнения. При использовании method='ffill' заполнение происходит вперед в пределах группы, а при method='bfill' - назад. Также можно передать словарь для указания разных значений для разных столбцов.
Синтаксис
df.groupby(by).fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
Пример
Давайте заполним пропуски в каждой группе с помощью предыдущего значения в группе:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 2],
'b': [10, None, 30, None, 50]
})
res = df.groupby('a').fillna(method='ffill')
print(res)
Результат выполнения кода:
a b
0 1 10.0
1 1 10.0
2 2 30.0
3 2 30.0
4 2 50.0
Пример
Заполним пропуски в каждой группе конкретным значением:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2],
'b': [None, 20, None, 40],
'c': [100, None, 300, None]
})
res = df.groupby('a').fillna({'b': 0, 'c': -1})
print(res)
Результат выполнения кода:
a b c
0 1 0.0 100.0
1 1 20.0 -1.0
2 2 0.0 300.0
3 2 40.0 -1.0
Пример
Заполним пропуски с помощью среднего значения в каждой группе:
import pandas as pd
df = pd.DataFrame({
'a': [1, 1, 2, 2, 2],
'b': [10, None, 30, None, 50],
'c': [None, 100, None, 200, None]
})
res = df.groupby('a').fillna({'b': df.groupby('a')['b'].transform('mean'),
'c': df.groupby('a')['c'].transform('mean')})
print(res)
Результат выполнения кода:
a b c
0 1 10.0 100.0
1 1 10.0 100.0
2 2 30.0 200.0
3 2 40.0 200.0
4 2 50.0 200.0