De cualquier manera más simple de asignar múltiples columnas en Python como R de datos.tabla :=

0

Pregunta

Me pregunto si hay alguna manera más sencilla de asignar múltiples columnas en Python, como el := en R data.table.

Por ejemplo, en Python que tendría que escribir como este:

df['Col_A'] = df.A/df.B
df['Col_B'] = df.C/df.D
df['Col_C'] = df.E/df.F * 1000000    
df['Col_D'] = df.G/df.H * 1000000

Sin embargo, es sólo una línea de código en R data.table:

df[, ':='(Col_A = A/B, Col_B = C/D, Col_C = E/F*1000000, Col_B = G/H*1000000)]
3

Mejor respuesta

3

Puede utilizar DataFrame.assign para asignar varias columnas:

df = df.assign(Col_A=df.A/df.B, Col_B=df.C/df.D, Col_C=df.E/df.F*1000000, Col_D=df.G/df.H*1000000)

Ejemplo:

df = pd.DataFrame(np.random.random((4, 8)), columns=list('ABCDEFGH'))

#           A         B  ...         H
# 0  0.771211  0.238201  ...  0.311904
# 1  0.197548  0.635218  ...  0.626639
# 2  0.332333  0.838589  ...  0.477978
# 3  0.929690  0.327412  ...  0.046179
df = df.assign(Col_A=df.A/df.B, Col_B=df.C/df.D, Col_C=df.E/df.F*1000000, Col_D=df.G/df.H*1000000)

#           A         B  ...         H     Col_A     Col_B         Col_C         Col_D
# 0  0.771211  0.238201  ...  0.311904  3.237647  1.547285  1.463586e+06  2.845234e+06
# 1  0.197548  0.635218  ...  0.626639  0.310993  1.385892  1.394466e+07  2.685293e+05
# 2  0.332333  0.838589  ...  0.477978  0.396300  0.078238  8.494174e+06  6.001031e+05
# 3  0.929690  0.327412  ...  0.046179  2.839514  0.852443  1.962892e+06  8.791233e+06

Si desea que la columna de los nombres con espacios, se puede utilizar un dict:

df = df.assign(**{'Col A': df.A/df.B, 'Col B': df.C/df.D, 'Col C': df.E/df.F*1000000, 'Col D': df.G/df.H*1000000})

#           A         B  ...         H      Col A     Col B         Col C         Col D
# 0  0.868320  0.086743  ...  0.505330  10.010311  6.680195  1.147554e+06  2.620416e+05
# 1  0.244341  0.908793  ...  0.389684   0.268863  2.388179  2.196769e+06  2.235063e+06
# 2  0.917949  0.248149  ...  0.710027   3.699188  0.453094  1.311617e+06  1.004200e+06
# 3  0.616655  0.498817  ...  0.703579   1.236235  2.186589  1.272981e+06  8.602272e+05
2021-11-14 06:53:44

Gracias, me gusta mucho su solución. Sin embargo, tengo una pregunta más, ¿qué pasa si quiero asignar un nombre de columna con el espacio?
Jiamei

@Jiamei puede utilizar un dict para que (respuesta actualizada)
tdy

Gracias de nuevo! Tengo una pregunta más. Si quiero asignar una columna adicional al contar el número de valores únicos de la "Col_x" agrupar por "Col_y", ¿cómo me acerco a eso?
Jiamei

@Jiamei ese tipo de sonidos como df.groupby("Col_y")["Col_x"].value_counts() o tal vez df.groupby("Col_y")["Col_x"].size()pero aquellos que realmente no encajar en el original df, así que no estoy seguro si eso es lo que quieres decir
tdy

OK, así que probablemente tenga que calcular por separado y luego se funden de nuevo a la original df.
Jiamei
0

Sería algo así como este trabajo para usted:

import pandas as pd

df = pd.DataFrame()

# fake data
a = [1,2,3]
b = None, None, None
c = True, False, True

# assign to df
df[["a", "b", "c"]] = np.asarray([a, b, c]).transpose((1, 0))

que los rendimientos de

   a     b      c
0  1  None   True
1  2  None  False
2  3  None   True

Aunque uno podría argumentar que escribir el código en múltiples línea hace más legible.

2021-11-14 06:35:03
0

sí, hay una manera más sencilla en python demasiado

import pandas as  pd
df = pd.DataFrame({"x":[1,2,3],"y":[4,5,6]})
df[["pp","ll","nn"]]= [df["x"]/df["y"],df["x"],df["x"]]
2021-11-14 06:21:28

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................