Я думаю, что вы можете использовать ffill
с duplicated
, если в каждой группе не только первое никакое значение NaN:
print (df)
Customer Score
0 3a62-4000 NaN
1 3a62-4799 500.0
2 3a62-4799 NaN
3 3a62-1234 450.0
4 3a62-1234 NaN
df.loc[df.Customer.duplicated(keep=False), 'Score'] = df.Score.ffill()
print (df)
Customer Score
0 3a62-4000 NaN
1 3a62-4799 500.0
2 3a62-4799 500.0
3 3a62-1234 450.0
4 3a62-1234 450.0
Если несколько значений на группы вы можете заполнить дубликаты на mean
(sum
, median
...) с transform
или apply
:
print (df)
Customer Score
0 3a62-4000 NaN
1 3a62-4799 500.0
2 3a62-4799 200.0
3 3a62-4799 NaN
4 3a62-1234 450.0
5 3a62-1234 NaN
df['Score'] = df.groupby('Customer')['Score'].transform(lambda x: x.fillna(x.mean()))
#df['Score'] = df.groupby('Customer')['Score'].apply(lambda x: x.fillna(x.mean()))
print (df)
Customer Score
0 3a62-4000 NaN
1 3a62-4799 500.0
2 3a62-4799 200.0
3 3a62-4799 350.0
4 3a62-1234 450.0
5 3a62-1234 450.0
Очень хорошее решение. Благодаря! – Oxymoron88
@ Oxymoron88 - спасибо. – jezrael
Хорошее решение. Плюс один – akrun