DataFame分组功能及其他配合使用方法
分组统计 👉 GroupBy
#*.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False,**kwargs)#axis=0 行 / 1 列
有这样一组数据 :
df =pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','three'],'data1':np.random.randn(5),'data2':np.random.randn(5)
})#-------------------------------#
key1 key2 data1 data2
0 a one-0.205263 1.820120
1 a two 0.436864 -1.858459
2 b one 0.695624 1.134222
3 b two 0.281301 1.735320
4 a three 1.040519 0.657742
View Code
如何对 ‘key1’ 进行 分组 并求 平均值 ?
ass = df['data1'].groupby(df['key1']) #这是一个分组对象,没有进行任何计算
ass.mean() #对"对象" 进行调用方法
#df.groupby('key1').mean()#df[['data1','data2']].groupby('key1').mean()
比较简单 ,呵 ,那么如何对多个'字段'进行分组 ? 要求对 key1 , key2进行分组并计算data2的平均值
df['data2'].groupby([df['key1'],df['key2']]).mean()#这种分组 只需要将需要的字段放入数组( 也是列表[] )中即可
#---------------------------#
key1 key2
a one1.820120three0.657742two-1.858459b one1.134222two1.735320Name: data2, dtype: float64
View Code
有如下数据 :
city =Series(['北京','长沙','长沙','北京','北京'])
years= Series([2018,2018,2019,2018,2019])#---------------------------#
0 北京1长沙2长沙3北京4北京
dtype: object
02018
1 2018
2 2019
3 2018
4 2019dtype: int64
那么 , 如何用城市 和 年份对 df 进行分组呢?
df['data1'].groupby([city,years]).mean()#----------------------------#
北京 2018 -0.681558
2019 1.580496长沙2018 -0.112299
2019 -0.498441Name: data1, dtype: float64#分组的键可以是任何长度适当(=len(index))的数组#👆 这个就是将分组键改成了自定义城市和年份 匹配相同的相加求平均值 ,不匹配的不计算#北京的2018相加 求平均 北京2019 相加求平均 . 长沙的也一样
View Code
那又 如何对整个 df 的 key1 分组求平均值?
df.groupby(['key1']).mean()#👆 自动聚合数值列,忽略 非数值 列
df.groupby([