大熊猫从GROUPBY

大熊猫从GROUPBY

问题描述:

得到的意思是我有一个纯文本文件看起来像这样:大熊猫从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尝试,但并没有取得多大进展。

+0

你每小时有一个时间戳吗?或者你可以每小时有多个时间戳吗? – nbeuchat

它真的很难尝试你自己的flat_file,但我认为这会工作(虽然更快的方式很可能是可能的)

从你的结果

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

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

你可以分两步做,首先用第一个groupby的输出创建一个数据框。然后groupby再次没有时间戳列来取每个组的平均值。

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

几乎在同一时间看起来几乎像我的答案。但是,您也将平均时间戳。我不确定这是否正确实施 – Quickbeam2k1

+0

@ Quickbeam2k1您说得对,实际上它的确会确实计算时间戳的平均值。 – nbeuchat

+0

@mkerins在你选择的领域使用'agg'应该解决这个问题。 Quickbeam2k1解决方案也是如此。 – nbeuchat