Eu tenho esse 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']})
Desejo obter o comprimento da lista após a divisão em ":" em col1, então desejo sobrescrever os valores se comprimento> 2 OU não sobrescrever os valores se comprimento <= 2.
Idealmente, em uma linha o mais rápido possível.
Atualmente, eu tento, mas ele retorna ValueError.
df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']])
EDIT: condição em col1. EDIT2: obrigado por todas as ótimas e rapidamente fornecidas respostas. surpreendente! EDIT3: tempo em 10 ^ 6 linhas:
@ansev 3.2657s
@jezrael 0.8922s
@ anky_91 1.9511s
col2
oucol1
?Respostas:
Use
Series.str.count
, adicione1
, compareSeries.gt
e atribua a lista a colunas filtradas na lista:fonte
gt(1)
vez de adicionar 1 egt(2)
?series.str.len()
Depois de dividir, é necessário determinar o comprimento da lista e comparar e.loc[]
, atribuir a lista sempre que a condição corresponder:fonte
Outra abordagem é
Series.str.split
comexpand = True
eDataFrame.count
comaxis=1
.fonte