У меня есть данные, подобные таблице ниже:
Type Size Color Color2
cat small white white
cat small white white
cat large brown #N/A
cat large black #N/A
dog large white white
dog small black black
cat small white white
dog small brown brown
dog small brown brown
dog small brown brown
cat large brown #N/A
cat large brown #N/A
dog large #N/A brown
dog large white white
dog large black black
cat large white #N/A
dog large brown brown
cat small white white
cat small white white
dog large brown brown
dog large white white
dog large #N/A brown
dog small black black
cat small white white
dog small white white
dog small white white
cat small white white
dog small black black
dog small black black
dog large brown brown
dog large brown brown
cat large black #N/A
cat small white white
Цель состоит в том, чтобы заполнить пропущенные значения в цвете и цвете 2 с помощью режима соответствующего столбца, обусловленного типом и размером.
Приведенный ниже фрагмент хорошо работает для столбца «Цвет» и игнорирует пропущенные значения в столбце «Цвет»
df.groupby(['Type','Size'])['Color'].transform(lambda x: x.mode()[0])
Однако мои фактические данные напоминают происходящее в столбце Color2. В этом столбце отсутствуют все значения Color2, соответствующие значению cat large. Таким образом, когда я применяю приведенный ниже фрагмент кода, я получаю ошибку индекса за пределами границ.
df.groupby(['Type','Size'])['Color2'].transform(lambda x: x.mode()[0])
Я хочу иметь возможность возвращать NaN / # N / A, если в определенной группе есть только пропущенные значения, но возвращать режим, игнорируя при этом пропущенные значения, если в группе есть пропущенные значения.