关于分类汇总
先创建一个DataFrame对象df:
df= pd.DataFrame({'Date': ['2015-05-08','2015-05-07','2015-05-06','2015-05-05','2015-05-08','2015-05-07','2015-05-06','2015-05-05'],
'Sym': ['aapl','aapl','aapl','aapl','aaww','aaww','aaww','aaww'],
'Data2': [11,8,10,15,110,60,100,40],
'Data3': [5,8,6,1,50,100,60,120]})
或者从csv文件读取
df = pd.read_csv('C:/Users/Desktop/a.csv')
三种分组的情况(col是列名)
第一种:df.groupby(col),返回一个按列进行分组的groupby对象;
第二种:df.groupby([col1,col2]),返回一个按多列进行分组的groupby对象;(df.groupby([col1,col2])表示先对col1列进行分类汇总,之后对col2列进行分类汇总)
第三种:df.groupby(col1)[col2]或者df[col2].groupby(col1),两者含义相同,返回按列col1进行分组后,col2的值;
对数据表中的数值列进行统计,给出包括count = 计数,mean = 平均数,std = 方差,min = 最小值,25% = 四分位数,50% = 二分位数,75% = 四分之三分位数,max = 最大值的信息。不会对非数值列统计。
数据表中的列按值是否连续,可以分为连续值列、离散值列。对于离散值列,可以统计其不重复值的个数。对于连续值列,统计不重复值一般没有意义。统计结果是一个Series对象。
每组内,只有数值列能求和,非数值列不可以。
每组内,按列统计每组的成员数。每列的统计结果是一样的。
group = df.groupby(['gender'])
df1 = group.mean()
group = df.groupby(['gender'])
df1 = group['math'].mean()
每组内,统计所有数值列的中位数,非数值列无中位数。
group = df.groupby(['gender'])
df1 = group.median()
group = df.groupby(['gender'])
df1 = group['math'].median() # 统计'math'列的中位数
每组内,统计所有数值列的最大值,非数值列无最大值。
group = df.groupby(['gender'])
df1 = group.max()
group = df.groupby(['gender'])
df1 = group['math'].max()
每组内,统计所有数值列的最小值,非数值列无最小值。
group = df.groupby(['gender'])
df1 = group.min()
group = df.groupby(['gender'])
df1 = group['math'].min()
每组内,统计所有数值列的标准差,非数值列无标准差。
group = df.groupby(['gender'])
df1 = group.std()
group = df.groupby(['gender'])
df1 = group['math'].std()
每组内,统计所有数值列的方差,非数值列无方差。
group = df.groupby(['gender'])
df1 = group.var()
group = df.groupby(['gender'])
df1 = group['math'].var()
每组内,统计所有数值列的二分位数,非数值列无二分位数。
group = df.groupby(['gender'])
df1 = group['math'].quantile()
每组内,统计所有数值列的累计和,非数值列无累计和。
[暂时没搞懂]
每组内,可以指定只求某一列的统计指标,包括平均数,方差等。function 可以是mean,或者std等。
group = df.groupby(['gender'])
df1 = group['math'].apply(np.mean) # 求组内均值
想同时查看每组内,某数值列的多个统计指标,可以用agg函数。它的参数是一个列表,列表中包含各个函数。
group = df.groupby(['gender'])
df1 = group['math'].agg([np.mean,np.std]) # 组内应用均值,方差两个函数
group = df.groupby(['gender'])
df1 = group.agg({'math':np.mean, 'chinese':np.std})