Tengo ese DataFrame:
df = pd.DataFrame(data={
'col0': [11, 22,1, 5]
'col1': ['aa:a:aaa', 'a:a', 'a', 'a:aa:a:aaa'],
'col2': ["foo", "foo", "foobar", "bar"],
'col3': [True, False, True, False],
'col4': ['elo', 'foo', 'bar', 'dupa']})
Quiero obtener la longitud de la lista después de dividir en ":" en col1, luego quiero sobrescribir los valores si length> 2 O no sobrescribir los valores si length <= 2.
Idealmente, en una línea lo más rápido posible.
Actualmente, lo intento pero devuelve ValueError.
df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']])
EDITAR: condición en col1. EDIT2: gracias por todas las excelentes y rápidas respuestas. ¡asombroso! EDITAR3: sincronización en 10 ^ 6 filas:
@ansev 3.2657s
@jezrael 0.8922s
@ anky_91 1.9511s
col2
ocol1
?Respuestas:
Use
Series.str.count
, agregue1
, compareSeries.gt
y asigne listas a columnas filtradas en la lista:fuente
gt(1)
lugar de agregar 1 ygt(2)
?series.str.len()
Después de dividir, necesita determinar la longitud de la lista, luego puede comparar y usar.loc[]
, asignar la lista donde coincida la condición:fuente
Otro enfoque es
Series.str.split
conexpand = True
yDataFrame.count
conaxis=1
.fuente