Мне нужно разумно объединить значения трех столбцов в кадре данных, как показано ниже.Код должен выбрать прогноз первого типа, который является True
, только первый, даже если другой последующий прогноз также True
.Если ни одно из предсказаний не является True
, возвращаемое значение должно быть NaN
.
index name t1 t1_check t2 t2_check t3 t3_check
----------------------------------------------------------------------------
0 cow animal True phone False fruit False
1 apple animal False fruit True food True
2 carrot vehicle False veg True animal False
3 dog pet True animal True object False
4 horse window False object False animal True
5 car pet False food False fruit False
Вот что я попробовал:
Сначала я объединил два связанных столбца и отбросилстарые.
In:
df['t1_comb'] = str(df['t1']) + str(df['t1_check'])
df['t2_comb'] = str(df['t2']) + str(df['t2_check'])
df['t3_comb'] = str(df['t3']) + str(df['t3_check'])
df.drop(columns=['t1', 't1_check', 't2', 't2_check', 't3', 't3_check'], inplace=True)
Out:
index name t1_comb t2_comb t3_comb
---------------------------------------------------------------
0 cow animalTrue phoneFalse fruitFalse
1 apple animalFalse fruitTrue foodTrue
2 carrot vehicleFalse vegTrue animalFalse
3 dog petTrue animalTrue objectFalse
4 horse windowFalse objectFalse animalTrue
5 car petFalse foodFalse fruitFalse
Затем я попытался заменить все записи, содержащие False
на NaN
, и удалить строку True
из каждой записи.
In:
df.loc[df['t1_comb'].str.contains('False'), 't1_comb'] = np.nan
df.loc[df['t2_comb'].str.contains('False'), 't2_comb'] = np.nan
df.loc[df['t3_comb'].str.contains('False'), 't3_comb'] = np.nan
df.t1_comb = df.t1_comb.str.replace('True', '')
df.t2_comb = df.t2_comb.str.replace('True', '')
df.t3_comb = df.t3_comb.str.replace('True', '')
Out:
index name t1_comb t2_comb t3_comb
---------------------------------------------------------------
0 cow animal NaN NaN
1 apple NaN fruit food
2 carrot NaN veg NaN
3 dog pet animal NaN
4 horse NaN NaN animal
5 car NaN NaN NaN
следующий шаг - где у меня возникают некоторые трудности, часть, где рассматривается только первое значение.
Нужный результат должен выглядеть примерно так:
index name type
----------------------------
0 cow animal
1 apple fruit
2 carrot veg
3 dog pet
4 horse animal
5 car NaN