Cómo agregar filas en una columna basada en valores repetidos en otra columna , y, finalmente, seguir la primera fila en python?

0

Pregunta

Soy muy nuevo en python pandas módulo.

Supongamos que tengo una trama de datos o una tabla como la siguiente:

 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 como sigue:


    | 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   |NaN  


  • Si los valores en la columna a se repiten, a continuación, agregue los valores correspondientes en la Columna C y pegar la suma en la nueva columna D (Por ejemplo, hay 3 filas de 12, por lo tanto debemos agregar los valores correspondientes de 100 + 50 + NaN, y la suma de resultados 150 deben ser almacenados en la nueva columna D).

  • Si los valores en la columna a no repetir pegar directamente de la Columna de los valores de C en la nueva columna D (tales como la fila 3), pero para NaN, debe ser 0 (tales como la fila 4).

Podría usted por favor me ayude a conseguir una salida como esta en python jupyter notebook:

      | 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      |200  

add calculated-columns dataframe pandas
2021-11-11 00:34:37
3

Mejor respuesta

5
df.groupby("Column A", as_index=False).agg(B=("Column B", "first"),
                                           C=("Column C", "first"),
                                           D=("Column C", "sum"))
#      Column A         B         C         D
# 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.0
2021-11-11 00:49:50
2

Aquí es un enfoque

df['Column D'] = df.groupby('Column A')['Column C'].transform('sum')
df = df.drop_duplicates('Column A')

El groupby('Column A') crea un grupo de filas para cada valor único en Column A. A continuación, el ['Column C'].transform('sum') agrega los valores de C para todas las filas en que los grupos.

Esta suma se guarda en la Columna D, y luego nos pueden quitar los duplicados para mantener sólo la primera

Hay algunos supuestos en esta solución. Se agrupan todos los 12 los valores en Una, incluso si no uno detrás del otro, que puede o no puede ser lo que usted desea.

2021-11-11 00:47:55

Podría por favor ayudarme con esto? stackoverflow.com/questions/69922880/...
new_bee
1
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'])
2021-11-11 00:56:50

En otros idiomas

Esta página está en otros idiomas

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