У меня есть датафрейм, как показано ниже:
import pandas as pd
df = pd.DataFrame({'Country':['USA','USA','MEX','IND','UK','UK','UK'],
'Region':['Americas','NaN','NaN','Asia','Europe','NaN','NaN'],
'Flower':['Rose','Rose','Lily','Orchid','Dandelion','Dandelion','Dandelion'],
'Animal':['Bison','NaN','Golden Eagle','Tiger','Lion','Lion','NaN'],
'Game':['Baseball','Baseball','soccer','hockey','cricket','cricket','cricket']})
Я хочу сгруппировать по Country
и Flower
и выполнить прямое или обратное заполнение столбцов Region
и Animal
, где отсутствуют значения. Однако столбец Game
должен остаться без изменений
Я пробовал это, но это не сработало:
df['Region'] = df.groupby(['Country','Flower'])['Region'].transform(lambda x: x.ffill())
также:
df.groupby(['Country','Flower'])['Animal', 'Region'].isna().bfill()
Я хочу знать, как это сделать.
пока это работает, но убирает столбец Игры:
df=df.replace({'NaN':np.nan})
df.groupby(['Country','Flower'])['Animal', 'Region'].bfill().ffill()
И если я сделаю преобразование, то будет несоответствие длины. Также обратите внимание, что это примерный фрейм данных, в котором я добавил «NaN» в виде строки в исходном фрейме как np.nan.