2017-04-20 1 views
1

Mettre en placePandas: agrégation conditionnelle moyenne et médiane

Je racler annonces de logements avec Scrapy et analyser les résultats avec pandas géants.

Je construis des trames de données, en les regroupant par emplacement et en les agrégeant sur plusieurs caractéristiques de logement (par exemple, location).


Problème

Je veux construire les mêmes dataframes, à savoir le regroupement sur l'emplacement et Agrégats de caractéristiques du logement, mais maintenant agrégeant conditionnelle.

C'est-à-dire, j'ai une caractéristique pour chaque annonce de logement nommée type qui est soit 1 ou 2. Je veux regrouper au-dessus de l'emplacement et agréger les caractéristiques du logement aussi conditionnellement sur type étant 1 ou 2.


code

group = ['borough','click district name for housing ads','district'] 
mdf['# for rent'] = 1 
aggregator = { 
     'median rent pw':'median', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)  

Ceci est mon code de travail, qui ne regroupe pas certaines conditions. Je pensais que je pourrais diviser mdf en deux DataFrames - un pour chaque type - et ensuite exécuter le code sur les deux images et fusionner les résultats dans une table. Cela semble un peu inefficace cependant.

De préférence, je veux le code pour faire quelque chose comme ceci:

aggregator = { 
     'median rent pw type 1 ':'median, conditionally on type = 1', 
     'median rent pw type 2 ':'median, conditionally on type = 2', 
     'median rent pw':'median', 
     'rent pw type 1':'mean, conditionally on type = 1', 
     'rent pw type 2':'mean, conditionally on type = 2', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

Comment dois-je procéder?

Répondre

1

Si je ne me trompe pas, je pense que vous pouvez simplement inclure type dans le groupby

group = ['type', 'borough','click district name for housing ads','district'] 
mdf['# for rent'] = 1 
aggregator = { 
     'median rent pw':'median', 
     'rent pw':'mean', 
     '# of roommates':'mean', 
     '# for rent':'sum', 
     } 

badf = mdf.groupby(group)['median rent pw','rent pw','# of roommates'].agg(aggregator)  

Ensuite, vous devriez être en mesure d'obtenir à type == 1

badf.loc[1] 

Ou

badf.xs(1) 
+0

Je serai damné. Merci! Btw, à la fois 'badf.loc [1]' et 'badf.xs (1)' fonctionnent, semble-t-il. – LucSpan