大熊猫从groupby获得意思

时间:2017-09-05 16:56:25

标签: python pandas pandas-groupby

我有一个平面文本文件,如下所示:

count=1 file_type=2007 app=smtp timestamp=2017-07-25 20:01:02.042000
count=2 file_type=jar app=http timestamp=2017-07-25 20:01:02.042000
count=4421 file_type=gzip app=http timestamp=2017-07-25 20:01:02.042000
count=31 file_type=pdf app=http timestamp=2017-07-25 20:01:02.042000
count=6 file_type=cdf app=http timestamp=2017-07-25 20:01:02.042000
count=64 file_type=ooxml app=http timestamp=2017-07-25 20:01:02.042000
count=8 file_type=7z app=http timestamp=2017-07-25 20:01:02.042000
count=38 file_type=2007 app=http timestamp=2017-07-25 20:01:02.042000
count=47 file_type=other app=http timestamp=2017-07-25 20:01:02.042000
count=383 file_type=zip app=http timestamp=2017-07-25 20:01:02.042000
count=47 file_type=rtf app=http timestamp=2017-07-25 20:01:02.042000
count=29 file_type=image app=http timestamp=2017-07-25 20:01:02.042000
count=1 file_type=zip app=ftp_data timestamp=2017-07-25 20:01:02.042000
count=99 file_type=cab app=http timestamp=2017-07-25 20:01:02.042000
count=22 file_type=pe32 app=http timestamp=2017-07-25 20:01:02.042000
count=77 file_type=pdf app=smtp timestamp=2017-07-25 20:01:02.042000
count=4 file_type=7z app=ftp_data timestamp=2017-07-25 19:01:01.407000
count=1 file_type=jar app=http timestamp=2017-07-25 19:01:01.407000
count=2 file_type=dmg app=http timestamp=2017-07-25 19:01:01.407000
count=4570 file_type=gzip app=http timestamp=2017-07-25 19:01:01.407000
count=109 file_type=pdf app=http timestamp=2017-07-25 19:01:01.407000
count=13 file_type=cdf app=http timestamp=2017-07-25 19:01:01.407000
count=2 file_type=xar app=http timestamp=2017-07-25 19:01:01.407000
count=232 file_type=ooxml app=http timestamp=2017-07-25 19:01:01.407000
count=12 file_type=7z app=http timestamp=2017-07-25 19:01:01.407000
count=98 file_type=2007 app=http timestamp=2017-07-25 19:01:01.407000
count=75 file_type=other app=http timestamp=2017-07-25 19:01:01.407000
count=8 file_type=pe32 app=ftp_data timestamp=2017-07-25 19:01:01.407000
count=867 file_type=zip app=http timestamp=2017-07-25 19:01:01.407000
count=304 file_type=image app=http timestamp=2017-07-25 19:01:01.407000
count=9 file_type=zip app=ftp_data timestamp=2017-07-25 19:01:01.407000
count=497 file_type=cab app=http timestamp=2017-07-25 19:01:01.407000
count=1 file_type=lzma app=http timestamp=2017-07-25 19:01:01.407000
count=45 file_type=pe32 app=http timestamp=2017-07-25 19:01:01.407000
count=43 file_type=pdf app=smtp timestamp=2017-07-25 19:01:01.407000
count=1 file_type=html app=http timestamp=2017-07-25 19:01:01.407000

我已将其加载到DataFrame中,如下所示:

    count   file_type   app timestamp
0   1       2007    smtp    2017-07-25 20:01:02.042
1   2       jar     http    2017-07-25 20:01:02.042
2   4421    gzip    http    2017-07-25 20:01:02.042
3   31      pdf     http    2017-07-25 20:01:02.042
4   6       cdf     http    2017-07-25 20:01:02.042
5   64      ooxml   http    2017-07-25 20:01:02.042
6   8       7z      http    2017-07-25 20:01:02.042
7   38      2007    http    2017-07-25 20:01:02.042
8   47      other   http    2017-07-25 20:01:02.042
9   383     zip     http    2017-07-25 20:01:02.042
10  47      rtf     http    2017-07-25 20:01:02.042
11  29      image   http    2017-07-25 20:01:02.042
12  1       zip     ftp_data    2017-07-25 20:01:02.042
13  99      cab     http    2017-07-25 20:01:02.042
14  22      pe32    http    2017-07-25 20:01:02.042
15  77      pdf     smtp    2017-07-25 20:01:02.042
16  4       7z      ftp_data    2017-07-25 19:01:01.407
17  1       jar     http    2017-07-25 19:01:01.407
18  2       dmg     http    2017-07-25 19:01:01.407
19  4570    gzip    http    2017-07-25 19:01:01.407
20  109     pdf     http    2017-07-25 19:01:01.407
21  13      cdf     http    2017-07-25 19:01:01.407
22  2       xar     http    2017-07-25 19:01:01.407
23  232     ooxml   http    2017-07-25 19:01:01.407
24  12      7z      http    2017-07-25 19:01:01.407
25  98      2007    http    2017-07-25 19:01:01.407
26  75      other   http    2017-07-25 19:01:01.407
27  8       pe32    ftp_data    2017-07-25 19:01:01.407
28  867     zip     http    2017-07-25 19:01:01.407
29  304     image   http    2017-07-25 19:01:01.407
30  9       zip     ftp_data    2017-07-25 19:01:01.407
31  497     cab     http    2017-07-25 19:01:01.407
32  1       lzma    http    2017-07-25 19:01:01.407
33  45      pe32    http    2017-07-25 19:01:01.407
34  43      pdf     smtp    2017-07-25 19:01:01.407
35  1       html    http    2017-07-25 19:01:01.407

使用时分组: df.groupby(['timestamp', 'app', 'file_type'])[['count']].sum()看起来像

timestamp                app        file_type   count
2017-07-25 19:01:01.407  ftp_data   7z          4
                                    pe32        8
                                    zip         9
                         http       2007        98
                                    7z          12
                                    cab         497
                                    cdf         13
                                    dmg         2
                                    gzip        4570
                                    html        1
                                    image       304
                                    jar         1
                                    lzma        1
                                    ooxml       232
                                    other       75
                                    pdf         109
                                    pe32        45
                                    xar         2
                                    zip         867
                          smtp      pdf         43
2017-07-25 20:01:02.042   ftp_data  zip         1
                          http      2007        38
                                    7z          8
                                    cab         99
                                    cdf         6
                                    gzip        4421
                                    image       29
                                    jar         2
                                    ooxml       64
                                    other       47
                                    pdf         31
                                    pe32        22
                                    rtf         47
                                    zip         383
                           smtp     2007        1
                                    pdf         77

每个时间戳条目代表一小时的数据,最后一步是平均每小时count列。我希望最终得到类似的东西:

app       file_type  avg
ftp_data  zip        ?
http      zip        ?
smtp      pdf        ?

我尝试过使用pivotpivot_tablestack,但没有取得多大进展。

2 个答案:

答案 0 :(得分:1)

您可以分两步完成,首先使用第一个groupby的输出创建一个数据框。然后再次groupby而不使用timestamp列来获取每个组的平均值。

dfg = df.groupby(['timestamp', 'app', 'file_type'])[['count']].sum().reset_index()
dfg.groupby(['app','file_type']).agg({'count': 'mean'})

答案 1 :(得分:0)

使用flat_file很难自己尝试,但我认为这样可行(尽管可能有更快的方法)

从结果开始

grouped = df.groupby(['timestamp', 'app', 'file_type'])[['count']].sum()
grouped.reset_index().groupby(['app', 'file_type'])['count'].mean()

应该有希望产生正确的解决方案。