Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

332
Visualizações
python pandas DataFrame - assign a list to multiple cells

I have a DataFrame like

name col1 col2
 a    aa   123
 a    bb   123
 b    aa   234

and a list

[1, 2, 3]

I want to replace the col2 of every row with col1 = 'aa' with the list like

name col1     col2
 a    aa   [1, 2, 3]
 a    bb       123
 b    aa   [1, 2, 3]

I tried something like

df.loc[df[col1] == 'aa', col2] = [1, 2, 3]

but it gives me the error:

ValueError: could not broadcast input array from shape (xx,) into shape (yy,)

How should I get around this?

over 4 years ago · Santiago Trujillo
5 Respostas
Responde à pergunta

0

A list comprehension with an if/else should work

df['col2'] = [x['col2'] if x['col1'] != 'aa' else [1,2,3] for ind,x in df.iterrows()]
over 4 years ago · Santiago Trujillo Relatório

0

It will be safe to do with for loop

df.col2 = df.col2.astype(object)
for x in df.index:
    if df.at[x,'col1'] == 'aa':
       df.at[x,'col2'] = [1,2,3]
       
df
  name col1       col2
0    a   aa  [1, 2, 3]
1    a   bb        123
2    b   aa  [1, 2, 3]
over 4 years ago · Santiago Trujillo Relatório

0

You can also use:

data = {'aa':[1,2,3]}
df['col2'] = np.where(df['col1'] == 'aa', df['col1'].map(data), df['col2'])

You should use this with care, as doing this will change list to both locations:

df['col2'].loc[0].append(5)
print(df)
#OUTPUT
  name col1          col2
0    a   aa  [1, 2, 3, 5]
1    a   bb           123
2    b   aa  [1, 2, 3, 5]

But this is fine:

df = df.loc[1:]
print(df)
#OUTPUT
  name col1       col2
1    a   bb        123
2    b   aa  [1, 2, 3]
over 4 years ago · Santiago Trujillo Relatório

0

Make it simple. np.where should do. Code below

df['col2']=np.where(df['col1']=='aa', str(lst), df['col2'])

Alternatively use pd.Series with list locked in double brackects

df['col2']=np.where(df['col1']=='aa', pd.Series([lst]), df['col2'])
over 4 years ago · Santiago Trujillo Relatório

0

import pandas as pd
df = pd.DataFrame({"name":["a","a","b"],"col1":["aa","bb","aa"],"col2":[123,123,234]})
l = [1,2,3]
df["col2"] = df.apply(lambda x: l if x.col1 == "aa" else x.col2, axis =1)
df
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda