Soy muy nuevo en el módulo de pandas de python.
Supongamos que tengo un marco de datos o una tabla de la siguiente manera:
df = pd.DataFrame({ 'Column A': [12,12,12, 15, 16, 141, 141, 141, 141], 'Column B':['Apple' ,'Apple' ,'Apple' , 'Red', 'Blue', 'Yellow', 'Yellow', 'Yellow', 'Yellow'], 'Column C':[100, 50, np.nan , 23 , np.nan , 199 , np.nan , 1,np.nan] })o tengo una tabla de datos de la siguiente manera:
| Column A | Column B |Column C ----| -------- | ---------|-------- 0 | 12 | Apple |100 1 | 12 | Apple |50 2 | 12 | Apple |NaN 3 | 15 | Red |23 4 | 16 | Blue |NaN 5 | 141 | Yellow |199 6 | 141 | Yellow |NaN 7 | 141 | Yellow |1 8 | 141 | Yellow |NaNSi se repiten los valores en la columna A, agregue los valores correspondientes en la columna C y pegue la suma en la nueva columna D (por ejemplo, hay 3 filas para 12, por lo tanto, debemos agregar los valores correspondientes 100 + 50 + NaN, y el resultado de la suma 150 debe almacenarse en la nueva columna D).
Si los valores de la columna A no se repiten, pegue directamente los valores de la columna C en la nueva columna D (como la fila 3), pero para NaN, debería ser 0 (como la fila 4).
¿Podría ayudarme a obtener un resultado como este en el cuaderno python jupyter:
| Column A | Column B |Column C |Column D ----- | -------- | ---------|---------|--------- 0 | 12 | Apple |100 |150 1 | 15 | Red |23 |23 2 | 16 | Blue |NaN |0 3 | 141 | Yellow |199 |200df.groupby("Column A", as_index=False).agg(B=("Column B", "first"), C=("Column C", "first"), D=("Column C", "sum")) # Column ABCD # 0 12 Apple 100.0 150.0 # 1 15 Red 23.0 23.0 # 2 16 Blue NaN 0.0 # 3 141 Yellow 199.0 200.0Aquí hay un enfoque
df['Column D'] = df.groupby('Column A')['Column C'].transform('sum') df = df.drop_duplicates('Column A') groupby('Column A') crea un grupo de filas para cada valor único en Column A . Luego ['Column C'].transform('sum') agrega los valores C para todas las filas en esos grupos.
Esta suma se guarda en la Columna D, y luego podemos eliminar los duplicados para quedarnos con el primero
Hay algunas suposiciones en esta solución. Agrupará los 12 valores en A incluso si no están uno detrás del otro, lo que puede o no ser lo que desea.
df = df.set_index(df['Column A']).drop('Column A', axis=1) df['Column D'] = df.groupby('Column A')['Column C'].sum() df = df.drop_duplicates(subset=['Column B'])