2016-04-26 17 views
0

Gibt es irgendwelche Komfortmethoden um Ergebnisse einer Mongodb Gruppenoperation in einen Pandas DataFrame zu laden?Mongo's Gruppenergebnisse zu Pandas DataFrame

Hier ist die Art der Mongo Abfrage der Gruppierung tut:

'$group': { 
     '_id': {'country': '$country', 'oem':'$oem'}, 
     'count': {'$sum': 1} 
    } 

Dies als Liste von Wörterbüchern kommt zurück, die wie folgt aussehen:

[ 
    ... 
    { "_id" : { "country" : "US", "oem" : "mmm" }, "count" : 595 }, 
    ... 
] 

ich diese in ein Datenframe geladen werden sollen, so dass country und oem automatisch zu Indizes werden. Kann man das Ergebnis nicht neu zuordnen, gibt es in der Pandas-API irgendetwas, das bereits damit umgehen kann? Oder kann ich die Mongo-Abfrage irgendwie neu schreiben, so dass sie eine Struktur zurückgibt, die Pandas-APIs freundlicher ist?

+0

Was ist Ihre erwartete Ausgabe? – styvane

+0

ein Datenrahmen mit drei Spalten: 'country',' oem' und 'count' (optional indiziert durch' country' und 'oem') –

Antwort

0

können Sie json_normalize() verwenden:

In [59]: l 
Out[59]: 
[{'_id': {'country': 'UA', 'oem': 'uuuu'}, 'count': 555}, 
{'_id': {'country': 'US', 'oem': 'aaaa'}, 'count': 595}, 
{'_id': {'country': 'DE', 'oem': 'bbbb'}, 'count': 777}] 

In [60]: from pandas.io.json import json_normalize 

In [61]: l 
Out[61]: 
[{'_id': {'country': 'UA', 'oem': 'uuuu'}, 'count': 555}, 
{'_id': {'country': 'US', 'oem': 'aaaa'}, 'count': 595}, 
{'_id': {'country': 'DE', 'oem': 'bbbb'}, 'count': 777}] 

In [62]: json_normalize(l) 
Out[62]: 
    _id.country _id.oem count 
0   UA uuuu 555 
1   US aaaa 595 
2   DE bbbb 777 

Setup:

l = [ 
    { "_id" : { "country" : "UA", "oem" : "uuuu" }, "count" : 555 }, 
    { "_id" : { "country" : "US", "oem" : "aaaa" }, "count" : 595 }, 
    { "_id" : { "country" : "DE", "oem" : "bbbb" }, "count" : 777 }, 
]