大熊猫查询分组内的分组

时间:2018-07-07 05:15:49

标签: mysql pandas dataframe

编写查询时,我无法根据计数获得前10名中的前10名

此查询中的我的起始表:

top_10_cars = 'CH', 'DA', 'AG', 'DC', 'LA', 'NY', 'SA', 'SE', 'DE', 'MI'

df = pd.read_sql("select\
                    count(*) as count\
                    ,ID\
                    ,CAR\
                    from "+db+"\
                    where pop in ('"+ "','".join(top_10_cars) +"')\
                    group by\
                    pop\
                    ,asn\
                    order by reqs desc\
                     ",conn)

结果是一个列表,其中包含按计数对每个汽车分组的所有ID:

Count       ID  CAR
67210048    7922    CH
2081655     20001   LA
488850583   7018    AG
567585985   7018    DA
450991      7922    SA
41123124    7018    CH
4135532     11427   DA
...
..
.

以上数据框太大。我只有每辆车的前10个ID最多。

例如CH:

Count       ID  CAR
67210048    7922    CH
25100548    7546    CH
465100      8542    CH
67254828    5622    CH
1251048     3522    CH
...
..
.

结果表应如下图所示

Count       ID  CAR
67210048    7922    CH
25100548    7546    CH
..
.
7210048     1546    DA
251005      5678    DA
25100548    7546    DA
465100      8542    DA
...
..
67254828    5622    DA
and 
so 
on.. 'AG', 'DC', 'LA', 'NY', 'SA', 'SE', 'DE', 'MI' 

1 个答案:

答案 0 :(得分:0)

这可能不是正确的方法,但我只用一些python包装了它:

df = pd.DataFrame()

for x in top_NA_cars:
    dftemp = pd.read_sql("select\
                            count(*) as count\
                            ,ID\
                            ,CAR\
                            from "+db+"\
                            where CAR in ('"+x+"')\
                            group by\
                            ID\
                            ,CAR\
                            order by count desc limit 10",conn)
    df = df.append(dftemp)

愿意寻求更好的解决方案,但是^确实有效。