Tengo un marco de datos que contiene una columna de cadenas. Quiero crear una nueva columna que combine el número de índice y la columna de cadena juntos en una lista de comprensión. El siguiente código realiza esta operación iterando en un bucle:

df=pd.DataFrame({'strings': ['string1','string2','string3']})
new_col=[]
for i in df['strings'].index.values:
    new_col.append(str(i)+','+df['strings'][i])
df['new_col']=new_col

El código anterior funciona pero es lento. ¿Cómo puedo hacer esto en una lista de comprensión?

1
afshin 7 oct. 2019 a las 22:37

4 respuestas

La mejor respuesta

Puede convertir el índice en cadena y agregar cadenas de forma habitual (matrices de):

df['new_col'] = df['strings'].index.astype(str) + ',' + df['strings']

Salida:

   strings    new_col
0  string1  0,string1
1  string2  1,string2
2  string3  2,string3
2
Quang Hoang 7 oct. 2019 a las 19:43

Esto proporcionará una nueva columna con el índice más su columna de cadena

df['new'] = df.index.astype(str) + df['strings']
0
Jeff R 7 oct. 2019 a las 21:54

Si desea comprender las listas , le recomendaría utilizar zip()

import pandas as pd
df=pd.DataFrame({'strings': ['string1','string2','string3']})
df['new_col'] = [str(y)+','+str(x) for x,y in zip(df['strings'],df.index.values.astype(int))]
print(df)

Salida:

   strings    new_col
0  string1  0,string1
1  string2  1,string2
2  string3  2,string3
1
Celius Stingher 7 oct. 2019 a las 19:45

Restablezca el índice y luego usando la columna para crear la nueva columna

df=df.reset_index()
df['new_col']=df['index'].astype(str)+','+df['strings']
0
Sudharsana Rajasekaran 7 oct. 2019 a las 19:59
58276088