Pandas分组:df.groupby()

关于分类汇总

先创建一个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的值;

查看每组的统计数据:df.groupby(column).describe()

对数据表中的数值列进行统计,给出包括count = 计数,mean = 平均数,std = 方差,min = 最小值,25% = 四分位数,50% = 二分位数,75% = 四分之三分位数,max = 最大值的信息。不会对非数值列统计。

组内离散列计数:df.groupby(column)[column2].value_counts()

数据表中的列按值是否连续,可以分为连续值列、离散值列。对于离散值列,可以统计其不重复值的个数。对于连续值列,统计不重复值一般没有意义。统计结果是一个Series对象。

组内数值列和:df.groupby(column).sum()

每组内,只有数值列能求和,非数值列不可以。

组内成员数:df.groupby(column).count()

每组内,按列统计每组的成员数。每列的统计结果是一样的。

组内数值列均值:df.groupby(column).mean()

  • 所有组的均值
group = df.groupby(['gender'])
df1 = group.mean()
  • 单组的均值
group = df.groupby(['gender'])
df1 = group['math'].mean()

组内数值列中位数:df.groupby(column).median()

每组内,统计所有数值列的中位数,非数值列无中位数。

  • 统计所有数值列的中位数
group = df.groupby(['gender'])
df1 = group.median()
  • 统计单个数值列的中位数
group = df.groupby(['gender'])
df1 = group['math'].median() # 统计'math'列的中位数

组内数值列最大值:df.groupby(column).max()

每组内,统计所有数值列的最大值,非数值列无最大值。

  • 统计所有数值列的最大值
group = df.groupby(['gender'])
df1 = group.max()
  • 统计单个数值列的最大值
group = df.groupby(['gender'])
df1 = group['math'].max()

组内数值列最小值:df.groupby(column).min()

每组内,统计所有数值列的最小值,非数值列无最小值。

  • 统计所有数值列的最小值
group = df.groupby(['gender'])
df1 = group.min()
  • 统计单个数值列的最小值
group = df.groupby(['gender'])
df1 = group['math'].min()

组内数值列标准差:df.groupby(column).std()

每组内,统计所有数值列的标准差,非数值列无标准差。

  • 统计所有数值列的标准差
group = df.groupby(['gender'])
df1 = group.std()
  • 统计单个数值列的标准差
group = df.groupby(['gender'])
df1 = group['math'].std()

组内数值列方差:df.groupby(column).var()

每组内,统计所有数值列的方差,非数值列无方差。

  • 统计所有数值列的方差
group = df.groupby(['gender'])
df1 = group.var()
  • 统计单个数值列的方差
group = df.groupby(['gender'])
df1 = group['math'].var()

组内数值列二分位数:df.groupby(column).quantile()

每组内,统计所有数值列的二分位数,非数值列无二分位数。

  • 统计单个数值列的二分位数
group = df.groupby(['gender'])
df1 = group['math'].quantile()

组内数值列累计和:df.groupby(column).cumsum()

每组内,统计所有数值列的累计和,非数值列无累计和。

[暂时没搞懂]

组内应用函数:df.groupby(column1)[column2].apply()

每组内,可以指定只求某一列的统计指标,包括平均数,方差等。function 可以是mean,或者std等。

group = df.groupby(['gender'])
df1 = group['math'].apply(np.mean) # 求组内均值

组内应用多个函数:df.groupby(column).agg([...])

想同时查看每组内,某数值列的多个统计指标,可以用agg函数。它的参数是一个列表,列表中包含各个函数。

group = df.groupby(['gender'])
df1 = group['math'].agg([np.mean,np.std]) # 组内应用均值,方差两个函数

组内不同列用不同函数:df.groupby(column).agg({column1:func, column2:func,...})

group = df.groupby(['gender'])
df1 = group.agg({'math':np.mean, 'chinese':np.std})

 

你可能感兴趣的:(代码,pandas,python,大数据)