前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据分析可视化】数据聚合技术Aggregation

【数据分析可视化】数据聚合技术Aggregation

作者头像
瑞新
发布2020-07-07 19:51:56
5530
发布2020-07-07 19:51:56
举报
代码语言:javascript
复制
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
代码语言:javascript
复制
# 读入城市天气csv文件
df = pd.read_csv('/Users/bennyrhys/Desktop/数据分析可视化-数据集/homework/city_weather.csv')
df

date

city

temperature

wind

0

03/01/2016

BJ

8

5

1

17/01/2016

BJ

12

2

2

31/01/2016

BJ

19

2

3

14/02/2016

BJ

-3

3

4

28/02/2016

BJ

19

2

5

13/03/2016

BJ

5

3

6

27/03/2016

SH

-4

4

7

10/04/2016

SH

19

3

8

24/04/2016

SH

20

3

9

08/05/2016

SH

17

3

10

22/05/2016

SH

4

2

11

05/06/2016

SH

-10

4

12

19/06/2016

SH

0

5

13

03/07/2016

SH

-9

5

14

17/07/2016

GZ

10

2

15

31/07/2016

GZ

-1

5

16

14/08/2016

GZ

1

5

17

28/08/2016

GZ

25

4

18

11/09/2016

SZ

20

1

19

25/09/2016

SZ

-10

4

代码语言:javascript
复制
# 根据城市进行分组
g = df.groupby('city')
g
代码语言:javascript
复制
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x1201a06d0>
代码语言:javascript
复制
# 可以直接进行聚合操作
g.mean()

temperature

wind

city

BJ

10.000

2.833333

GZ

8.750

4.000000

SH

4.625

3.625000

SZ

5.000

2.500000

代码语言:javascript
复制
g.describe()

temperature

wind

count

mean

std

min

25%

50%

75%

max

count

mean

std

min

25%

50%

75%

max

city

BJ

6.0

10.000

8.532292

-3.0

5.75

10.0

17.25

19.0

6.0

2.833333

1.169045

2.0

2.00

2.5

3.00

5.0

GZ

4.0

8.750

11.842719

-1.0

0.50

5.5

13.75

25.0

4.0

4.000000

1.414214

2.0

3.50

4.5

5.00

5.0

SH

8.0

4.625

12.489281

-10.0

-5.25

2.0

17.50

20.0

8.0

3.625000

1.060660

2.0

3.00

3.5

4.25

5.0

SZ

2.0

5.000

21.213203

-10.0

-2.50

5.0

12.50

20.0

2.0

2.500000

2.121320

1.0

1.75

2.5

3.25

4.0

代码语言:javascript
复制
# 传入聚合函数 使用
g.agg('min')

date

temperature

wind

city

BJ

03/01/2016

-3

2

GZ

14/08/2016

-1

2

SH

03/07/2016

-10

2

SZ

11/09/2016

-10

1

代码语言:javascript
复制
# 测试自定义聚合函数
def foo(attr):
    print(type(attr)),print(attr)
    return np.nan
代码语言:javascript
复制
g.agg(foo)
代码语言:javascript
复制
<class 'pandas.core.series.Series'>
0    03/01/2016
1    17/01/2016
2    31/01/2016
3    14/02/2016
4    28/02/2016
5    13/03/2016
Name: date, dtype: object
<class 'pandas.core.series.Series'>
14    17/07/2016
15    31/07/2016
16    14/08/2016
17    28/08/2016
Name: date, dtype: object
<class 'pandas.core.series.Series'>
6     27/03/2016
7     10/04/2016
8     24/04/2016
9     08/05/2016
10    22/05/2016
11    05/06/2016
12    19/06/2016
13    03/07/2016
Name: date, dtype: object
<class 'pandas.core.series.Series'>
18    11/09/2016
19    25/09/2016
Name: date, dtype: object
<class 'pandas.core.series.Series'>
0     8
1    12
2    19
3    -3
4    19
5     5
Name: temperature, dtype: int64
<class 'pandas.core.series.Series'>
14    10
15    -1
16     1
17    25
Name: temperature, dtype: int64
<class 'pandas.core.series.Series'>
6     -4
7     19
8     20
9     17
10     4
11   -10
12     0
13    -9
Name: temperature, dtype: int64
<class 'pandas.core.series.Series'>
18    20
19   -10
Name: temperature, dtype: int64
<class 'pandas.core.series.Series'>
0    5
1    2
2    2
3    3
4    2
5    3
Name: wind, dtype: int64
<class 'pandas.core.series.Series'>
14    2
15    5
16    5
17    4
Name: wind, dtype: int64
<class 'pandas.core.series.Series'>
6     4
7     3
8     3
9     3
10    2
11    4
12    5
13    5
Name: wind, dtype: int64
<class 'pandas.core.series.Series'>
18    1
19    4
Name: wind, dtype: int64

date

temperature

wind

city

BJ

NaN

NaN

NaN

GZ

NaN

NaN

NaN

SH

NaN

NaN

NaN

SZ

NaN

NaN

NaN

代码语言:javascript
复制
# 自定义函数 聚合 (最大值-最小值)
def foo(attr):
    return attr.max() - attr.min()
代码语言:javascript
复制
g.agg(foo)

temperature

wind

city

BJ

22

3

GZ

26

3

SH

30

3

SZ

30

3

代码语言:javascript
复制
# 对某两个列做groupBy
g_new = df.groupby(['city', 'wind'])
g_new
代码语言:javascript
复制
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x1213acdd0>
代码语言:javascript
复制
# 细分了风力的group
g_new.groups
代码语言:javascript
复制
{('BJ', 2): Int64Index([1, 2, 4], dtype='int64'),
 ('BJ', 3): Int64Index([3, 5], dtype='int64'),
 ('BJ', 5): Int64Index([0], dtype='int64'),
 ('GZ', 2): Int64Index([14], dtype='int64'),
 ('GZ', 4): Int64Index([17], dtype='int64'),
 ('GZ', 5): Int64Index([15, 16], dtype='int64'),
 ('SH', 2): Int64Index([10], dtype='int64'),
 ('SH', 3): Int64Index([7, 8, 9], dtype='int64'),
 ('SH', 4): Int64Index([6, 11], dtype='int64'),
 ('SH', 5): Int64Index([12, 13], dtype='int64'),
 ('SZ', 1): Int64Index([18], dtype='int64'),
 ('SZ', 4): Int64Index([19], dtype='int64')}
代码语言:javascript
复制
# 多列groupby get也要注意
g_new.get_group(('BJ',2))

date

city

temperature

wind

1

17/01/2016

BJ

12

2

2

31/01/2016

BJ

19

2

4

28/02/2016

BJ

19

2

代码语言:javascript
复制
# 多列GroupBy的for
for (name_1, name_2), group in g_new:
    print(name_1, name_2)
    print(group)
代码语言:javascript
复制
BJ 2
         date city  temperature  wind
1  17/01/2016   BJ           12     2
2  31/01/2016   BJ           19     2
4  28/02/2016   BJ           19     2
BJ 3
         date city  temperature  wind
3  14/02/2016   BJ           -3     3
5  13/03/2016   BJ            5     3
BJ 5
         date city  temperature  wind
0  03/01/2016   BJ            8     5
GZ 2
          date city  temperature  wind
14  17/07/2016   GZ           10     2
GZ 4
          date city  temperature  wind
17  28/08/2016   GZ           25     4
GZ 5
          date city  temperature  wind
15  31/07/2016   GZ           -1     5
16  14/08/2016   GZ            1     5
SH 2
          date city  temperature  wind
10  22/05/2016   SH            4     2
SH 3
         date city  temperature  wind
7  10/04/2016   SH           19     3
8  24/04/2016   SH           20     3
9  08/05/2016   SH           17     3
SH 4
          date city  temperature  wind
6   27/03/2016   SH           -4     4
11  05/06/2016   SH          -10     4
SH 5
          date city  temperature  wind
12  19/06/2016   SH            0     5
13  03/07/2016   SH           -9     5
SZ 1
          date city  temperature  wind
18  11/09/2016   SZ           20     1
SZ 4
          date city  temperature  wind
19  25/09/2016   SZ          -10     4
代码语言:javascript
复制
g.groups
代码语言:javascript
复制
{'BJ': Int64Index([0, 1, 2, 3, 4, 5], dtype='int64'),
 'GZ': Int64Index([14, 15, 16, 17], dtype='int64'),
 'SH': Int64Index([6, 7, 8, 9, 10, 11, 12, 13], dtype='int64'),
 'SZ': Int64Index([18, 19], dtype='int64')}
代码语言:javascript
复制
# 单列group 获取获取某列
g.get_group('BJ')

date

temperature

wind

0

03/01/2016

8

5

1

17/01/2016

12

2

2

31/01/2016

19

2

3

14/02/2016

-3

3

4

28/02/2016

19

2

5

13/03/2016

5

3

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档