《利用Python进行数据分析》第十章数据聚合与分组知识点总结

1、groupby机制

首先创建相关DataFrame

import pandas as pd
import numpy as np
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)})
df

输出
在这里插入图片描述
如果想要根据key1标签来计算data1列的均值,有多种方法可以实现。其中一种是访问data1并使用key1列调用groupby方法。

grouped = df['data1'].groupby(df['key1'])
grouped.mean()

输出

key1
a    0.767080
b   -0.124782
Name: data1, dtype: float64

如果将多个数组作为列表传入groupby,我们会得到不一样的结果。

means = df['data1'].groupby([df['key1'], df['key2']]).mean()
means

输出一个双层索引

key1  key2
a     one     0.974100
      two     0.353039
b     one     0.481500
      two    -0.731065
Name: data1, dtype: float64

2、数据聚合

如果使用自己的函数来聚合,可以使用agg与aggregate方法

grouped = df.groupby('key1')
def peak_to_peak(arr):
    return arr.max()-arr.min()
grouped.agg(peak_to_peak)

输出
在这里插入图片描述
也可以将方法组成的列表带入agg,对原DataFrame进行操作。

functions = ['count','mean','max']
grouped['data1','data2'].agg(functions)

输出
在这里插入图片描述
可以传递具有自定义名称的元组列表。字典同理。

ftuples = [('DDD','mean'),('AAA',np.var)]
grouped.agg(ftuples)

在这里插入图片描述
如果你想索引不是键值的话,可以使用as_index=False.

df.groupby(['key1'], as_index=False).mean()

在这里插入图片描述

3、拆分、合并

构造扑克牌

#红桃 黑桃 梅花 方块
suits = ['H','S','C','D']
card_val = (list(range(1,11)) + [10]*3)*4
base_names = ['A'] + list(range(2,11))+['J','K','Q']
cards = []
for suit in ['H','S','C','D']:
    cards.extend(str(num) + suit for num in base_names)
deck = pd.Series(card_val, index=cards)
deck[:13]

在这里插入图片描述
从这幅牌中拿出五张

def draw(deck,n=5):
	return deck.sample(n)
draw(deck)

在这里插入图片描述
假设我们要在每个花色中抽取两张牌,因为花色是牌名最后一个字符,我们可以基于这点进行分组。

get_suit = lambda card: card[-1]
deck.groupby(get_suit).apply(draw, n=2)#groupby默认索引 如索引为2D card[-1]就为D

在这里插入图片描述
以上就是第十章数据聚合相关内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值