pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要
等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统
计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换
或其他运算,如规格化、线性回归、排名或选取子集等。计算透视表或交叉表。执行分位数分析以及其他分
groupby分组函数:
返回值:返回重构格式的DataFrame,特别注意,groupby里面的字段内的数据重构后都会变成索引
groupby(),一般和sum()、mean()一起使用,如下例:
先自定义生成数组
import pandas as pd
df = pd.DataFrame({'key1':list('ababa'),
'key2': ['one','two','one','two','one'],
'data1': np.random.randn(5),
'data2': np.random.randn(5)})
print(df)
data1 data2 key1 key2
0 -1.313101 -0.453361 a one
1 0.791463 1.096693 b two
2 0.462611 1.150597 a one
3 -0.216121 1.381333 b two
4 0.077367 -0.282876 a one
应用groupby,分组键均为Series(譬如df[‘xx’]),实际上分组键可以是任何长度适当的数组
grouped=df['data1'].groupby(df['key1'])
print(grouped.mean())
a -0.257707
b 0.287671
Name: data1, dtype: float64
states=np.array(['Ohio','California','California','Ohio','Ohio'])
years=np.array([2005,2005,2006,2005,2006])
print(df['data1'].groupby([states,years]).mean())
California 2005 0.791463
2006 0.462611
Ohio 2005 -0.764611
2006 0.077367
Name: data1, dtype: float64
df.groupby('key1').mean()
data1 data2
a -0.257707 0.138120
b 0.287671 1.239013
对分组进行迭代
for name, group in df.groupby('key1'):
print (name,group)
a data1 data2 key1 key2
0 -1.313101 -0.453361 a one
2 0.462611 1.150597 a one
4 0.077367 -0.282876 a one
b data1 data2 key1 key2
1 0.791463 1.096693 b two
3 -0.216121 1.381333 b two
对group by后的内容进行操作,可转换成字典
piece=dict(list(df.groupby('key1')))
{'a': data1 data2 key1 key2
0 -1.313101 -0.453361 a one
2 0.462611 1.150597 a one
4 0.077367 -0.282876 a one, 'b': data1 data2 key1 key2
1 0.791463 1.096693 b two
3 -0.216121 1.381333 b two}
value = piece['a']
groupby默认是在axis=0上进行分组的,通过设置也可以在其他任何轴上进行分组
grouped=df.groupby(df.dtypes, axis=1)
value = dict(list(grouped))
print(value)
{dtype('float64'): data1 data2
0 -1.313101 -0.453361
1 0.791463 1.096693
2 0.462611 1.150597
3 -0.216121 1.381333
4 0.077367 -0.282876, dtype('O'): key1 key2
0 a one
1 b two
2 a one
3 b two
4 a one}
对于大数据,很多情况是只需要对部分列进行聚合
#对df进行'key1','key2'的两次分组,然后取data2的数据,对两次细分的分组数据取均值
value = df.groupby(['key1','key2'])[['data2']].mean()
data2
key1 key2
a one 0.138120
b two 1.239013
Out[1]:
data1 data2 key1 key2
0 -1.313101 -0.453361 a one
1 0.791463 1.096693 b two
2 0.462611 1.150597 a one
3 -0.216121 1.381333 b two
4 0.077367 -0.282876 a one
df['key2'].iloc[-1] ='two'
value = df.groupby(['key1','key2'])[['data2']].mean()
value
Out[2]:
data2
key1 key2
a one 0.348618
two -0.282876
b two 1.239013
pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。对DataFrame的列应用各种各样的函数。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等。
DataFrame
.loc
Access a group of rows and columns by label(s) or a boolean array.
.loc[] is primarily label based, but may also be used with a boolean array.
# 可以使用label值,但是也可以使用布尔值
Allowed inputs are: # 可以接受单个的label,多个label的列表,多个label的切片
A single label, e.g. 5 or ‘a’, (note that 5 is in
语法如下:
Dataframe
.
groupby
(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False)
by:字典,映射,serie
groupby
的函数定义:
DataFrame
.
groupby
(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
by :接收映射、函数、标签或标签列表;用于确定
聚合
的组。
axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
level : 接收int、级别名称或序列,默认为None;如果轴是一个多索引(层次化),则按一个或多个特定级别
分组
。
as_index:接收布尔值,默认Ture;Ture则返回以组标签为索引的对象
>>> df = pd.
DataFrame
({'A': [1, 1, 2, 2],
... 'B': [1, 2, 3, 4],
... ...
dataframe
的
groupby
提供了
分组
,切片,切块的操作,根据一列或者多列进行拆分数据。
对于
分组
后的数据可以计数,平均值,众数等等。同样通过各种函数还可以进行透视表,交叉表,分位表等等
分组
的分析
groupby
函数:
data.
groupby
(df[‘key’])
dataframe
重构数据,且key会变成新的索引,可以dic(list())转为字典通过key查看。
生成
dataframe
数据
import pandas as pd
import numpy as
groupby
的函数定义:
DataFrame
.
groupby
(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
所见 1 :日常用法
import pandas as pd
df = pd.
DataFrame
({'Gender' : ['男', '女', '男', '男', '男', '男', '女', '女', '女'],
'name
df.
groupby
([Column1,Column2])[Condition1].agg({Column3:
“mean”,Column4:“sum”}).reset_index()
1、【易百教程】Pandas
分组
(
GroupBy
)
# 语法顺序和逻辑执行顺序
df.
groupby
([Column1,Column2])[Condition1].agg({Column3: "mean",Column4:"sum"}).reset_index()
1.
groupby
基本用法
=====================================================================================
1.1 一级分类_
分组
求和
import pandas as pd
data = [[‘a’, ‘A’, 109], [‘b’, ‘B’, 112], [‘c’, ‘A’, 125], ..
1. 函数定义
DataFrame
.
groupby
(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
by : 接收映射、函数、标签或标签列表;用于确定
聚合
的组
axis : 接收 0/1;用于表示沿行(0)或列(1)分割。
level : 接收int、级别名称或序列,默认为None;如果轴是一个多索引(层次化),则按一个或多个特定级别
分组
as_index :
groupby
()是一个
分组
函数,对数据进行
分组
操作的过程可以概括为:split-apply-combine三步:
1.按照键值(key)或者
分组
变量将数据
分组
。
2.对于每组应用我们的函数,这一步非常灵活,可以是
python
自带函数,可以是我们自己编写的函数。
3.将函数计算后的结果
聚合
。
df = pd.
DataFrame
({'key1':list('aabba'),
`
DataFrame
.
groupby
()` 是 Pandas 中非常实用的一个函数,它能够对数据进行
分组
,然后对每个组进行操作,最后将结果合并。下面是一些常见的用法:
1. 按照某一列进行
分组
:
```
python
df.
groupby
('column_name')
2. 按照多列进行
分组
:
```
python
df.
groupby
(['column_name_1', 'column_name_2'])
3. 对
分组
后的数据进行
聚合
操作:
```
python
df.
groupby
('column_name').mean() # 计算每组的平均值
df.
groupby
('column_name').sum() # 计算每组的和
df.
groupby
('column_name').count() # 计算每组的数量
4. 对
分组
后的数据进行过滤:
```
python
df.
groupby
('column_name').filter(lambda x: x['column_name'].mean() > 0) # 过滤出平均值大于0的组
5. 对
分组
后的数据进行转换:
```
python
df.
groupby
('column_name').transform(lambda x: x - x.mean()) # 对每组数据进行平均值的归一化处理
6. 对
分组
后的数据进行遍历:
```
python
for group_name, group_data in df.
groupby
('column_name'):
print(group_name)
print(group_data)
以上是 `
DataFrame
.
groupby
()` 的一些常见用法,希望能对你有所帮助。