Comment ajouter des lignes dans une colonne basée sur des valeurs répétées dans une autre colonne , et enfin maintenir la première ligne en python?

0

La question

Je suis très nouveau à l'python pandas module.

Supposons que j'ai une trame de données ou une table comme suit:

 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]
    }) 

ou j'ai un tableau de données comme suit:


    | 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 les valeurs dans la colonne A sont répétées puis ajouter les valeurs correspondantes dans la Colonne C et coller la somme en colonne D (Par exemple, il y a 3 lignes de 12, donc il convient d'ajouter les valeurs correspondantes 100 + 50 + NaN, et la somme résultat 150 doit être stocké dans une nouvelle colonne D).

  • Si les valeurs dans la colonne A ne répétez pas directement coller la Colonne C, les valeurs dans la colonne D (comme la ligne 3), mais NaN, il devrait être 0 (comme la ligne 4).

Pourriez-vous m'aider à obtenir un résultat comme ceci en python jupyter ordinateur portable:

      | 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

La meilleure réponse

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

Ici est une approche

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

L' groupby('Column A') crée un groupe de lignes pour chaque valeur unique dans Column A. Puis le ['Column C'].transform('sum') ajoute les valeurs de C pour toutes les lignes dans les groupes.

Cette somme est enregistré à la Colonne D, et l'on peut ensuite déposer les doublons pour garder juste la première

Il y a quelques hypothèses dans cette solution. Il permettra de regrouper tous les 12 les valeurs dans Un même si elles ne sont pas les uns après les autres, ce qui peut ou peut ne pas être ce que vous voulez.

2021-11-11 00:47:55

Pourriez-vous s'il vous plaît aidez-moi avec celui-ci? 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

Dans d'autres langues

Cette page est dans d'autres langues

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