181 votes

GroupBy pandas DataFrame et sélection de la valeur la plus courante

J'ai un cadre de données avec trois colonnes de chaînes. Je sais que la seule valeur de la troisième colonne est valable pour chaque combinaison des deux premières. Pour nettoyer les données, je dois grouper le cadre de données par les deux premières colonnes et sélectionner la valeur la plus courante de la troisième colonne pour chaque combinaison.

Mon code :

import pandas as pd
from scipy import stats

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
                  'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
                  'Short name' : ['NY','New','Spb','NY']})

print source.groupby(['Country','City']).agg(lambda x: stats.mode(x['Short name'])[0])

La dernière ligne de code ne fonctionne pas, elle indique "Key error 'Short name'" et si j'essaie de regrouper uniquement par ville, j'obtiens un AssertionError. Que puis-je faire pour corriger cela ?

0voto

Le problème aquí est la performance, si vous avez beaucoup de lignes, ce sera un problème.

Si c'est votre cas, essayez avec ceci :

import pandas as pd

source = pd.DataFrame({'Country' : ['USA', 'USA', 'Russia','USA'], 
              'City' : ['New-York', 'New-York', 'Sankt-Petersburg', 'New-York'],
              'Short_name' : ['NY','New','Spb','NY']})

source.groupby(['Country','City']).agg(lambda x:x.value_counts().index[0])

source.groupby(['Country','City']).Short_name.value_counts().groupby['Country','City']).first()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X