import pandas as pd
import numpy as np
df=pd.DataFrame({'A':['foo','bar','foo','bar',
'foo','bar','foo','foo'],
'B':['one','one','two','three',
'two','two','one','three'],
'C':np.random.randn(8),
'D':np.random.randn(8)})#randn=>具有标准正态分布
df
grouped=df.groupby('A')
grouped
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x00000000052092B0>
grouped.count()#统计次数
grouped=df.groupby(['A','B'])#索引多项
grouped.count()
def get_letter_type(letter):
if letter.lower() in 'aeiou':
return 'a'
else:
return 'b'
grouped=df.groupby(get_letter_type,axis=1)
grouped.count().iloc[0]
a 1 b 3 Name: 0, dtype: int64
s=pd.Series([1,2,3,1,2,3],[8,7,6,8,7,6])
s
8 1 7 2 6 3 8 1 7 2 6 3 dtype: int64
1.指定多个索引的多个操作
grouped=s.groupby(level=0)#默认从0开始
grouped.first()#索引的第一部分,自动去除重复部分;也可以指定last()
6 3 7 2 8 1 dtype: int64
grouped.sum()
6 6 7 4 8 2 dtype: int64
grouped=s.groupby(level=0,sort=False)
grouped.first()
8 1 7 2 6 3 dtype: int64
2.单独索引某一列的某一个元素:多重索引
df2=pd.DataFrame({'X':['A','B','A','B'],'Y':[1,2,3,4]})
df2
2-1 多重所以方法一
df2.groupby(['X']).get_group('A')#关注具体的某一个键值
2-2 多重所以方法二
arrays=[['foo','bar','foo','bar', 'foo','bar','foo','foo'],
['one','one','two','three','two','two','one','three']]
index=pd.MultiIndex.from_arrays(arrays,names=['first','second'])#添加索引名字
s=pd.Series(np.random.randn(8),index=index)#对索引键来添加值
s
first second foo one -0.518263 bar one 0.583992 foo two 1.338273 bar three -0.671916 foo two 0.633448 bar two 0.144302 foo one 0.828419 three -0.834918 dtype: float64
grouped=s.groupby(level=0)#索引第一列
grouped.sum()
first bar 0.056377 foo 1.446958 dtype: float64
grouped=s.groupby(level='second')#索引第二列,也可以指定名字
grouped.sum()
second one 0.894148 three -1.506835 two 2.116022 dtype: float64
3 aggregate:以A B为键求和
grouped=df.groupby(['A','B'])
grouped.aggregate(np.sum)
grouped=df.groupby(['A','B'],as_index=False)#as_index=False :不去除重复的行,是一行行索引
grouped.aggregate(np.sum)
grouped=df.groupby(['A','B']).sum().reset_index()#重新构建索引
grouped
grouped=df.groupby(['A','B'])
grouped.size()#统计出现次数
A B bar one 1 three 1 two 1 foo one 2 three 1 two 2 dtype: int64
7.得出统计特性值
grouped.describe().head()
grouped=df.groupby('A')
grouped['C'].agg([np.sum,np.mean,np.std])
grouped['C'].agg({'sum1':np.sum,'mean1':np.mean,'std1':np.std})#改名字
参与评论
手机查看
返回顶部