2017-09-15 2 views
1

Comment faire la somme de plusieurs colonnes (colonnes C4, C5 et C6, par exemple) en utilisant chaque entrée unique dans une autre colonne (par exemple C2). Par exemple, je voudrais créer une nouvelle base de données qui réduirait la colonne C2 par import et export et montrerait aussi la somme de C4, C5 et C6 (et de préférence supprimer les autres colonnes C1 et C3).Python: additionner plusieurs colonnes dans une trame de données par chaque entrée de ligne unique dans une autre colonne

Sample Table

+1

S'il vous plaît fournir un exemple de code que vous avez essayé –

+0

j'ai simplifié le problème parce que mon dataset réel est trop grand mais si xdata est mon dataframe, j'ai utilisé ydata = xdata.sum (axis = 0) pour obtenir une somme de chaque colonne puis esse Utilisé nativement ydata [C4:] pour isoler le grand total mais n'a évidemment pas retenu la possibilité de sommer par des entrées de lignes spécifiques dans les colonnes C1, C2 ou C3 – KSQ

Répondre

0

Vous pouvez le faire en utilisant les pandas géants groupby fonction

df = pd.DataFrame([['A', 'Import', 'Argentina', 1, 1, 1], 
        ['B', 'Import', 'Brazil', 2, 2, 2], 
        ['C', 'Export', 'UJ', 3, 3, 3], 
        ['D', 'Export', 'US', 4, 4, 4], 
        ['A', 'Export', 'Canada', 5, 5, 5], 
        ['B', 'Export', 'Russia', 6, 6, 6], 
        ['C', 'Import', 'China', 7, 7, 7], 
        ['D', 'Import', 'India', 8, 8, 8]], 
        columns=['C1', 'C2', 'C3', 'C4', 'C5', 'C6']) 

results = df.groupby("C2").sum() 

print(results) 

Ce qui vous donnera

 C4 C5 C6 
C2     
Export 18 18 18 
Import 18 18 18 
+0

merci c'est très utile, exactement ce qui me manquait. Existe-t-il un meilleur moyen d'ignorer les colonnes indésirables précédentes que de créer une nouvelle structure de données: results [C4:] – KSQ

+0

@KSQ pandas a tendance à fonctionner en créant de nouvelles copies de la structure de données lorsque des modifications sont effectuées, certaines fonctions ont un inplace option pour ne pas créer une nouvelle copie. Par exemple, pour déposer des colonnes, vous pouvez faire 'df.drop (['C1', 'C2', C3 '], axis = 1, inplace = True)', qui retournera seulement les dernières colonnes et ne créera pas de copie. –

+0

Je vois, merci Ken cela a été très utile – KSQ