好用的分类统计--Python

今天做了一个分类统计,感叹下pandas的强大,也记录下。

统计抽象下类似是这样的,第一列和第二列是事物,第三列表示时间段,第四列表示被访问的值,总计100多万行数据,需要统计aaa、bbb在各时段被访问的次数,a/b/c在各时段被访问的次数:

key1 key2 time_h value
aaa a 1 13
aaa b 3 14
aaa c 2 15
bbb a 2 16
bbb b 3 16
bbb c 4 15
aaa a 1 15
aaa b 4 14
aaa c 5 1
bbb a 2 1
bbb b 3 3
bbb c 1 15

作为一个小白,100多万行数据咋弄呢?pandas提供了一个十分强大的分类统计的 东东groupby。

下面上实际环境的代码和效果:

import pandas as p
from pandas import DataFrame

data=p.read_table('e:\aaa.txt',names=['key1','key2','time_h','count'])
         key1  key2  time_h  count
0        2500  165A      12    292
1        2500  165B       2    129
2        2500  2FAC      20      2
3        2500  2FAD      10     51
4        2500  2FAE       0     19
5        2500   3E9       7    188
6        2500  4343      17    150
7        2500  4C0F      16     30
8        2500  52BF      23   1265
9        2500  5B6B      23     93
10       2500  6EA3      23    321
11       2500  7CBD      17   1414
12       2500  8ACB       0    299
13       2500  8B07       9    587
14       2500  8E6E      15    734
15       2500  951C      17   1525
16       2500  951D       7    721
17       2500  9955      22    496
18       2500  9956      12     46
19       2500  9D47      20    257
20       2500  A522      15      1
21       2500  B06F       6    609
22       2500  B0CB      16    287
23       2500  B502      16    647
24       2500  B503       6    456
25       2500  B731       3    406
26       2500  B85F      18    738
27       2500  BE1D      20    149
28       2500  C0FA      22    320
29       2500  C0FB      12    793
...       ...   ...     ...    ...
1355371  A656  C3FE      14    527
1355372  A656  C3FF       4     11
1355373  A656  C400      16    669
1355374  A656  C613       1      2
1355375  A656  CC8F       2     54
1355376  A656  CD9A       5     25
1355377  A656  CEAC      22    155
1355378  A656  CEAD      12    312
1355379  A656  CF10      17     95
1355380  A656  D40E      23      3
1355381  A656  D491      15     23
1355382  A656  D492       5      5
1355383  A656  DAE7      14    622
1355384  A656  E01B      19      7
1355385  A656  E01C       9     43
1355386  A656  E021       6     22
1355387  A656  E099      10    709
1355388  A656  E31D       5    166
1355389  A656  E37D      18    143
1355390  A656  E37E       8    212
1355391  A656  E695       9    187
1355392  A656  ED37      18     76
1355393  A656  ED38       8     28
1355394  A656  EE14      21     91
1355395  A656  EE15      11    116
1355396  A656  EE8D      19     26
1355397  A656  F2AF      16   1580
1355398  A656  F4F3      18    187
1355399  A656  F530       0    121
1355400  A656  FD6D      11    132


[1355401 rows x 4 columns]
groupby_key1=data.groupby([data['key1'],data['time_h']])
count_key1=groupby_key1.sum()
 
  
               count
key1 time_h         
2500 0        120536
     1         96932
     2         85677
     3         84432
     4         84836
     5         92258
     6        121453
     7        171230
     8        215994
     9        261364
     10       287322
     11       298202
     12       275230
     13       232288
     14       257102
     15       279391
     16       278959
     17       298990
     18       265210
     19       250705
     20       311118
     21       288481
     22       226874
     23       160231
2501 0        125977
     1        108975
     2        105377
     3         98728
     4        101166
     5        110157
...              ...
A654 18       857317
     19       745186
     20       844859
     21       805869
     22       713122
     23       561586
A656 0        492572
     1        353716
     2        291838
     3        256836
     4        234004
     5        239540
     6        339325
     7        495552
     8        715217
     9        984915
     10      1226009
     11      1341233
     12      1244051
     13      1122711
     14      1259215
     15      1328429
     16      1368174
     17      1422818
     18      1180176
     19       980080
     20      1045760
     21       953768
     22       816589
     23       630840

[1918 rows x 1 columns]
groupby_key2=data.groupby([data['key2'],data['time_h']])
count_key2=groupby_key2.sum()
               count
key2 time_h         
0    0        418529
     1        244211
     2        164690
     3        119029
     4        103841
     5        121329
     6        248265
     7        522416
     8       1027657
     9       1781401
     10      2311444
     11      2442649
     12      1807534
     13      1402002
     14      2005455
     15      2318970
     16      2455734
     17      2488684
     18      2152525
     19      1323280
     20      1499644
     21      1262039
     22      1010349
     23       620009
10   0            18
     1            22
     2            16
     3            13
     4            17
     5            21
...              ...
FFEB 14            4
     15            9
     16            1
     17            1
     18            1
     19            1
FFF  0           229
     1           164
     2           261
     3           158
     4           133
     5           184
     6           160
     7           209
     8           214
     9           219
     10          242
     11          238
     12          362
     13          170
     14          285
     15          226
     16          255
     17          256
     18          212
     19          215
     20          330
     21          247
     22          241
     23          276


[1097254 rows x 1 columns]
几行几秒搞定问题!




你可能感兴趣的:(数据分析)