python dataframe的groupby
dataframe 的 groupby提供了分组,切片,切块的操作,根据一列或者多列进行拆分数据。对于分组后的数据可以计数,平均值,众数等等。同样通过各种函数还可以进行透视表,交叉表,分位表等等分组的分析groupby函数:用法: data.groupby(df[‘key’])返回值: dataframe重构数据,且key会变成新的索引,可以dic(list())转为字典通过key查看。测试案例生
·
dataframe 的 groupby提供了分组,切片,切块的操作,根据一列或者多列进行拆分数据。
对于分组后的数据可以计数,平均值,众数等等。同样通过各种函数还可以进行透视表,交叉表,分位表等等分组的分析
groupby函数:
用法:
data.groupby(df[‘key’])
返回值:
dataframe重构数据,且key会变成新的索引,可以dic(list())转为字典通过key查看。
测试案例
生成dataframe数据
import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':list('aacca'),
'key2':[1,2,3,2,2],
'data1':[2,4,7,5,3],
'data2':[1 for i in range(5)],
'data3':np.random.randn(5)
})
df
key1 | key2 | data1 | data2 | data3 | |
---|---|---|---|---|---|
0 | a | 1 | 2 | 1 | -2.150799 |
1 | a | 2 | 4 | 1 | 1.751041 |
2 | c | 3 | 7 | 1 | 0.902273 |
3 | c | 2 | 5 | 1 | 0.886773 |
4 | a | 2 | 3 | 1 | 0.489002 |
df[‘data1’].groupby(df[‘key’])
对df中的一列数据根据key进行分组.
groupby后数据转为字典
gb = df['data1'].groupby(df['key1'])
gb_dic = dict(list(gb))
gb_dic
{'a': 0 2
1 4
4 3
Name: data1, dtype: int64,
'c': 2 7
3 5
Name: data1, dtype: int64}
对data1通过key1分组求值
gb1 = df['data1'].groupby(df['key1'])
gb1.mean()
gb1.max()
gb1.sum()
<pandas.core.groupby.generic.SeriesGroupBy object at 0x000001F10CF6DD88>
对data1通过key1,key2分组
df.groupby([Series1,Series2]),其中,Series1可以是df[‘key1’],也可以是np.array()
gb2 = df['data1'].groupby([df['key1'],df['key2']])
gb2.sum()
key1 key2
a 1 2
2 7
c 2 5
3 7
Name: data1, dtype: int64
gb2 = df['data1'].groupby([np.array([2001,2002,2003,2001,2003]),df['key2']])
gb2.sum()
key2
2001 1 2
2 5
2002 2 4
2003 2 3
3 7
Name: data1, dtype: int64
.groupby(‘key’)
直接对key进行分组,这样对所有的数值列都进行聚合,如果有非数值列,则不进行计算,丢掉该列。
# key1是非数值列,所以通过key2分组后,对于key1那一列不进行聚合
gb3 = df.groupby('key2')
gb3.sum()
data1 | data2 | data3 | |
---|---|---|---|
key2 | |||
1 | 2 | 1 | -2.150799 |
2 | 12 | 3 | 3.126817 |
3 | 7 | 1 | 0.902273 |
# key2是数值列,所以通过key1分组后进行聚合
gb3 = df.groupby('key1')
gb3.sum()
key2 | data1 | data2 | data3 | |
---|---|---|---|---|
key1 | ||||
a | 5 | 9 | 3 | 0.089244 |
c | 5 | 12 | 2 | 1.789047 |
对行分组
默认对列(axis=0)进行分组,如果需要,也可以对行分组(axis=1)
gb4 = dict(list(df.groupby(df.dtypes,axis=1)))
gb4
{dtype('int64'): key2 data1 data2
0 1 2 1
1 2 4 1
2 3 7 1
3 2 5 1
4 2 3 1,
dtype('float64'): data3
0 -2.150799
1 1.751041
2 0.902273
3 0.886773
4 0.489002,
dtype('O'): key1
0 a
1 a
2 c
3 c
4 a}
更多推荐
已为社区贡献4条内容
所有评论(0)