Quiero escribir un script que identificará las instancias en las que aparece una palabra (cadena) en una fila de un marco de datos de pandas más de una vez.
Usando una función lambda, puedo identificar la existencia de una cadena en una fila, pero no puedo encontrar ninguna información sobre cómo identificar '2 o más' instancias de la cadena, este es un ejemplo de lo que tengo actualmente:
df = pd.DataFrame({'ID':[1,2,3],'Ans1':['Yes','Yes','Yes'],'Ans2':['No','Yes','No'],'Ans3':['No','No','No']}) df['Result'] = df.apply(lambda row: row.astype(str).str.contains('Yes').any(), axis=1) dfPseudocódigo para lo que estoy tratando de obtener:
if 'Yes' isin row > 1: df['Results'] == TrueResultado deseado:
ID Ans1 Ans2 Ans3 Result 1 Yes No No False 2 Yes Yes No True 3 Yes No No FalseIntente, puede hacer un filtrado de columnas si no desea verificar que el marco de datos completo sea sí, luego use eq , equals to y sum with axis=1 para sumar valores a lo largo de las filas y luego verifique si esa suma es gt , mayor que, 1:
df['Result'] = df.eq('Yes').sum(1).gt(1)Producción:
ID Ans1 Ans2 Ans3 Result 0 1 Yes No No False 1 2 Yes Yes No True 2 3 Yes No No FalseTambién podrías hacer:
df['Result'] = df[df == 'Yes'].count(axis=1).gt(1)Este código debería funcionar para su caso específico. Literalmente implementa su pseudocódigo en cada fila.
def check_row(row): count = 0 for i in row: if i == 'Yes': count += 1 if count > 1: return True else: return False df['Results'] = df.apply(check_row, axis=1)