Je charge un fichier CSV, qui possède les colonnes suivantes: date, texta, textb, numbera, numéros
Je veux regrouper par les colonnes: Date, Texta et Textb - mais je veux appliquer "somme" à Numbera, mais "min" à la noticeb.
data = pd.read_table("file.csv", sep=",", thousands=',')
grouped = data.groupby(["date", "textA", "textB"], as_index=False)
... Mais je ne peux pas voir comment appliquer ensuite deux fonctions agrégées différentes, à deux colonnes différentes? C'est à dire. sum(numberA), min(numberB)
La méthode agg
peut accepter un dict, auquel cas les touches indiquent la colonne à laquelle la fonction est appliquée:
grouped.agg({'numberA':'sum', 'numberB':'min'})
Par exemple,
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three',
'two', 'two', 'one', 'three'],
'number A': np.arange(8),
'number B': np.arange(8) * 2})
grouped = df.groupby('A')
print(grouped.agg({
'number A': 'sum',
'number B': 'min'}))
rendements
number B number A
A
bar 2 9
foo 0 19
Cela montre également que Pandas peut gérer des espaces dans les noms de colonne. Je ne suis pas sûr de l'origine du problème, mais les espaces littéraux n'auraient pas dû poser un problème. Si vous souhaitez enquêter sur cette plus loin,
print(df.columns)
sans réaffecter les noms de colonne, montrera-nous montrer le repr
des noms. Peut-être qu'il y avait un caractère difficile à voir dans le nom de la colonne ressemblant à un espace (ou d'un autre caractère) mais était en fait un u'\xa0'
(Espace sans pause), par exemple.