una nueva insertar filtrar documentacion datos data columna aƱadir agregar python pandas calculated-columns

python - insertar - marco de datos de pandas crea nuevas columnas y rellena con valores calculados desde la misma df



insertar columna en pandas (2)

Puede hacerlo fácilmente manualmente para cada columna como esta:

df[''A_perc''] = df[''A'']/df[''sum'']

Si desea hacer esto en un paso para todas las columnas, puede usar el método div ( http://pandas.pydata.org/pandas-docs/stable/basics.html#matching-broadcasting-behavior ):

ds.div(ds[''sum''], axis=0)

Y si desea que esto se agregue en un solo paso al mismo marco de datos:

>>> ds.join(ds.div(ds[''sum''], axis=0), rsuffix=''_perc'') A B C D sum A_perc B_perc / 1 0.151722 0.935917 1.033526 0.941962 3.063127 0.049532 0.305543 2 0.033761 1.087302 1.110695 1.401260 3.633017 0.009293 0.299283 3 0.761368 0.484268 0.026837 1.276130 2.548603 0.298739 0.190013 C_perc D_perc sum_perc 1 0.337409 0.307517 1 2 0.305722 0.385701 1 3 0.010530 0.500718 1

Aquí hay un ejemplo simplificado de mi df:

ds = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=[''A'',''B'',''C'',''D'']) ds A B C D 1 1.099679 0.042043 0.083903 0.410128 2 0.268205 0.718933 1.459374 0.758887 3 0.680566 0.538655 0.038236 1.169403

Me gustaría sumar los datos en la fila de columnas sabiamente:

ds[''sum'']=ds.sum(axis=1) ds A B C D sum 1 0.095389 0.556978 1.646888 1.959295 4.258550 2 1.076190 2.668270 0.825116 1.477040 6.046616 3 0.245034 1.066285 0.967124 0.791606 3.070049

Ahora, aquí viene mi pregunta! Me gustaría crear 4 nuevas columnas y calcular el valor porcentual del total (suma) en cada fila. Entonces, el primer valor en la primera columna nueva debería ser (0.095389 / 4.258550), el primer valor en la segunda columna nueva (0.556978 / 4.258550) ... y así sucesivamente ... Ayuda, por favor


In [56]: df = pd.DataFrame(np.abs(randn(3, 4)), index=[1,2,3], columns=[''A'',''B'',''C'',''D'']) In [57]: df.divide(df.sum(axis=1), axis=0) Out[57]: A B C D 1 0.319124 0.296653 0.138206 0.246017 2 0.376994 0.326481 0.230464 0.066062 3 0.036134 0.192954 0.430341 0.340571