Pandas分组计算实例

Pandas分组计算:拆分–>应用–>合并
拆分:根据什么键进行分组?
应用:每个分组进行什么样的计算?
合并:把每个分组的计算结果合并起来。

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.randint(1, 10, 5),
                  'data2': np.random.randint(1, 10, 5)})
df

# 对Series进行分组
# 通过索引对齐关联起来
grouped = df['data1'].groupby(df['key1'])
grouped.mean()
df['data1'].groupby([df['key1'], df['key2']]).mean()

# 对DataFrame进行分组
df.groupby('key1').mean()
means = df.groupby(['key1', 'key2']).mean()['data1']
means
means.unstack()
df.groupby(['key1', 'key2'])['data1'].mean()

# 每个分组的元素个数
df.groupby(['key1', 'key2']).size()

# 对分组进行迭代
for name, group in df.groupby('key1'):
    print name
    print group

for name, group in df.groupby(['key1', 'key2']):
    print name
    print group

# 转化为字典
d = dict(list(df.groupby('key1')))
d
d['a']

# 按列分组
df.dtypes
grouped = df.groupby(df.dtypes, axis=1)
dict(list(grouped))

# 通过字典进行分组
df = pd.DataFrame(np.random.randint(1, 10, (5, 5)), 
                  columns=['a', 'b', 'c', 'd', 'e'], 
                  index=['Alice', 'Bob', 'Candy', 'Dark', 'Emily'])
df
df.ix[1, 1:3] = np.NaN
df
mapping = {'a': 'red', 'b': 'red', 'c': 'blue', 'd': 'orange', 'e': 'blue'}
grouped = df.groupby(mapping, axis=1)
grouped.sum()
grouped.count()
grouped.size()

# 通过函数来分组:当函数作为分组依据时,数据表里的每个索引(可以是行索引,也可以是列索引)都会调用一次函数,函数的返回值作为分组的索引,即相同的返回值分在同一组。
df = pd.DataFrame(np.random.randint(1, 10, (5, 5)), 
                  columns=['a', 'b', 'c', 'd', 'e'], 
                  index=['Alice', 'Bob', 'Candy', 'Dark', 'Emily'])
df
def _dummy_group(idx):
    print idx
    return idx
df.groupby(_dummy_group)
df.groupby(_dummy_group, axis=1)
grouped = df.groupby(len)
grouped.sum()
grouped.size()
grouped.count()

# 多级索引数据根据索引级别来分组
columns = pd.MultiIndex.from_arrays([['China', 'USA', 'China', 'USA', 'China'],
                                     ['A', 'A', 'B', 'C', 'B']], names=['country', 'index'])
df = pd.DataFrame(np.random.randint(1, 10, (5, 5)), columns=columns)
df
df.groupby(level='country', axis=1).count()
df.groupby(level='country', axis=1).sum()
df.groupby(level='index', axis=1).count()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值