Заполнить NaN в столбце, по данным из другого, если те не входят в определенный список?
Датафрейм:
name | year_of_release | platform |
---|---|---|
Rayman Arena | 2001.0 | PS2 |
Rayman Arena | 2002.0 | GBA |
Rayman Arena | NaN | GC |
Madden NFL 2004 | 2003.0 | XB |
Madden NFL 2004 | NaN | GBA |
Madden NFL 2004 | NaN | PS2 |
Я хочу заполнить NaN в колонке year_of_release
, годом такого же названия игры, но расположенной на другой платформе. Есть проблема, что у идентичных наименований может быть разный год релиза - в таком случае оставить NaN.
Я решила сначала создать список, где отфильтровала идентичные наименования с разными годами релиза, после с помощью apply пыталась заполнить NaN в колонке year_of_release
, исключая строки в которых наименование попадает в список. Всё что не имеет идентичных наименований и одинаковый год релиза я решила оставить как NaN. Заполнять решила средним, потому что если выбирать медиану, то название, где больше NaN становятся NaN. На данный момент названия не фильтруются по созданному списку.
создание списка в которые входят идентичные наименования с разным годом релиза:
excludae_list = df.groupby('name')['year_of_release'].agg(['min', 'max']).reset_index()
excludae_list = excludae_list[excludae_list['min'] != excludae_list['max']]
excludae_list = excludae_list['name']
заполнение пропусков в колонке year_of_release
:
df['year_of_release'] = df.groupby('name')['year_of_release'].apply(lambda x: x.fillna(np.mean(x)) if x.name not in exclude_list else np.nan)