python pandas groupby分组后的数据怎么用pandas提供了一个灵活高效的groupby功能,它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作 。根据一个或多个键(可以是函数、数组或DataFrame列名)拆分pandas对象 。计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数 。对DataFrame的列应用各种各样的函数 。应用组内转换或其他运算,如规格化、线性回归、排名或选取子集等 。计算透视表或交叉表 。执行分位数分析以及其他分组分析 。
1、首先来看看下面这个非常简单的表格型数据集(以DataFrame的形式):
123456789101112
import pandas as pd df = pd.DataFrame({'key1':['a', 'a', 'b', 'b', 'a'],...'key2':['one', 'two', 'one', 'two', 'one'],...'data1':np.random.randn(5),...'data2':np.random.randn(5)}) dfdata1data2 key1 key20 -0.4106730.519378aone1 -2.1207930.199074atwo20.642216 -0.143671bone30.975133 -0.592994btwo4 -1.017495 -0.530459aone
假设你想要按key1进行分组,并计算data1列的平均值 , 我们可以访问data1,并根据key1调用groupby:
123
grouped = df['data1'].groupby(df['key1']) groupedpandas.core.groupby.SeriesGroupBy object at 0x04120D70
变量grouped是一个GroupBy对象,它实际上还没有进行任何计算 , 只是含有一些有关分组键df['key1']的中间数据而已,然后我们可以调用GroupBy的mean方法来计算分组平均值:
12345
grouped.mean()key1a-1.182987b0.808674dtype: float64
说明:数据(Series)根据分组键进行了聚合,产生了一个新的Series,其索引为key1列中的唯一值 。之所以结果中索引的名称为key1,是因为原始DataFrame的列df['key1']就叫这个名字 。
2、如果我们一次传入多个数组,就会得到不同的结果:
12345678
means = df['data1'].groupby([df['key1'], df['key2']]).mean() meanskey1key2aone-0.714084two-2.120793bone0.642216two0.975133dtype: float64
通过两个键对数据进行了分组,得到的Series具有一个层次化索引(由唯一的键对组成):
12345
means.unstack()key2onetwokey1a-0.714084 -2.120793b0.6422160.975133
在上面这些示例中,分组键均为Series 。实际上,分组键可以是任何长度适当的数组:
12345678
states = np.array(['Ohio', 'California', 'California', 'Ohio', 'Ohio']) years = np.array([2005, 2005, 2006, 2005, 2006]) df['data1'].groupby([states, years]).mean()California2005-2.12079320060.642216Ohio20050.2822302006-1.017495dtype: float64
3、此外 , 你还可以将列名(可以是字符串、数字或其他Python对象)用作分组将:
123456789101112
df.groupby('key1').mean()data1data2key1a-1.1829870.062665b0.808674 -0.368333 df.groupby(['key1', 'key2']).mean()data1data2key1 key2aone-0.714084 -0.005540two-2.1207930.199074bone0.642216 -0.143671two0.975133 -0.592994
说明:在执行df.groupby('key1').mean()时,结果中没有key2列 。这是因为df['key2']不是数值数据 , 所以被从结果中排除了 。默认情况下,所有数值列都会被聚合,虽然有时可能会被过滤为一个子集 。
无论你准备拿groupby做什么,都有可能会用到GroupBy的size方法,它可以返回一个含有分组大小的Series:
1234567
df.groupby(['key1', 'key2']).size()key1key2aone2two1bone1two1dtype: int64
注意:分组键中的任何缺失值都会被排除在结果之外 。
4、对分组进行迭代
GroupBy对象支持迭代 , 可以产生一组二元元组(由分组名和数据块组成) 。看看下面这个简单的数据集:
12345678910111213
for name, group in df.groupby('key1'):...print(name)...print(group)...adata1data2 key1 key20 -0.4106730.519378aone1 -2.1207930.199074atwo4 -1.017495 -0.530459aonebdata1data2 key1 key220.642216 -0.143671bone30.975133 -0.592994btwo
推荐阅读
- 像素射击游戏排位视频教程,像素射击玩法
- 截止2017年html5游戏款,html 5游戏
- 地统计学gis,地统计学在地理学中的应用
- 视频中加小程序,视频中加小程序怎么弄
- java分数程序代码 java分数求和代码
- 可爱小视频是什么软件,可爱短视频
- python+文件写入时换行,python写入文件不换行
- 初级游戏开发助理,急招游戏设计开发助理
- c语言函数的奇偶性 c语言运用函数判断奇偶性