У меня есть фрейм данных, как показано ниже
data = {'ID': [1,2,3,4,5],
'text1':['ab','cd','ef','gh','ij'],
'text2':['ab','de','fh','hj','ij'],
'text3':['xy','cd','mn','op','qr'],
'flag1': ['y', 'n', 'y', 'y', 'n'],
'flag2': ['y', 'y', 'y', 'n', 'n'],
'flag3': ['y', 'n', 'y', 'n', 'y']}
frame = pd.DataFrame(data)
Я хочу добавить новый столбец - данные ['unique_text_count'] на основе следующих условий:
- если данные ['flag1'] == 'y' или data ['flag2'] == 'y' или data ['flag3'] == 'y' -> Любой флаг должен быть 'y'
- При условии, что одно из вышеприведенных условий имеет значение True, если какая-либо строка во фрейме данных имеет любое из значений флага как 'y', то соответствующие значения data ['text1'], data ['text2'] & data ['text3' ] следует проверить наличие уникальных значений
Значение нового столбца - data ['unique_text_count'] будет равно:
0 - если все значения флага для этой строки равны 'n '
1 - если любое из значений флага равно' y ', а количество уникальных значений в соответствующих текстовых столбцах, где флаг равен' y ', равно 1
2 - если любое из значения флага равны 'y', а количество уникальных значений в соответствующих текстовых столбцах, где флаг равен 'y', равно 2
3 - если любое из значений флага равно 1 и количество уникальных значений в t Соответствующие текстовые столбцы, где флаг равен 'y', равны 3
Окончательный результат для 5 строк:
data ['unique_text_count'] = [2, 1 , 3, 1, 1]
Я уже пытался использовать iterrows () и выполнять итерации по каждой строке, применять условия и вычислять счет, но это занимает очень много времени. Итак, я надеюсь на лучший способ сделать это без необходимости перебирать каждую строку отдельно