ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
* 类似于SQL里面的group by 语句,不过pandas提供了更加复杂的函数方法 * 我们可以对index或者column进行分组,可以被一个元素,也可以是任意多个元素分组。分组后计算的方式是一样的,无论是基于index还是column. ***** 读文件 ![](https://img.kancloud.cn/3e/07/3e07cf56d206e079946c4fa53482f8e7_1367x383.png) ***** 对director_name列的每个数据值进行频数统计 ![](https://img.kancloud.cn/5f/8c/5f8c5af89b1d0d7a7db84a9898e8a4ec_305x265.png) ***** ``` #将数据集按director_name分组 grouped = df.groupby("director_name") ``` ***** #分组后对各组进行频数统计 ``` grouped.size() ``` ![](https://img.kancloud.cn/61/c2/61c26af7a86dcf66fee5f6ea9c5ef837_308x224.png) ***** ``` #可以看到每个分组的名字和在这个组下的各个索引 grouped.groups ``` ![](https://img.kancloud.cn/61/fc/61fc1faf3da6a3adfd7a77a6ff411ebb_775x182.png) ***** ``` # 可以看到各个分组的名字,和每个分组下组内的各个数据 for name,group in grouped: print(name) print(group) ``` ***** **把导演名字列作为索引,然后按照索引分组** ![](https://img.kancloud.cn/39/15/391514c76d079924b4b0ac0df4b6a5ca_1134x458.png) ``` # 按照第一层索引分组 #g2 = df1.groupby(level=0) g2 = df1.groupby(level=["director_name"]) ``` ![](https://img.kancloud.cn/4b/9a/4b9ad434350340c91ba724919289ed66_1039x148.png) ### 2.2.1. 统计计算 1. 单个统计量计算 mean/sum/std 2. 多个统计量计算 3. 不同列应用不同统计量 分组计算很重要的一点是:**我们的每一个统计函数都是作用在每一个group上,不是单个样本,也不是全部数据** ![](https://img.kancloud.cn/36/ee/36eee2b7121b1fad6c70a213edf5768a_1298x307.png) ***** 对每个导演电影的时长进行求和统计 ![](https://img.kancloud.cn/72/5d/725db3380df8dc95a612b7d4b7b48f07_355x287.png) ***** 对每组的两列进行统计 ![](https://img.kancloud.cn/d9/dc/d9dc1d572a4da054d72af277d84c17d5_390x456.png) ***** 对多个列进行多个统计量的统计 ![](https://img.kancloud.cn/22/56/22569c0e0adc7cda8ce34474ff4d6edb_686x313.png) ***** ![](https://img.kancloud.cn/33/bc/33bc781a4330b460aa7314d2556f3fc2_581x367.png) ***** ### 2.2.2. Transformation 基于每个分组操作,对组内元素进行转换 ``` #将缺失值都填充为0 df1 = df.fillna(0) #将数据集按导演名字分组 grouped = df1.groupby("director_name") #lambda表达式 z分数计算 z_score = lambda s : (s-s.mean())/ s.std() #将每个列的每个组内元素根据z_score进行计算转换,s.mean()是每个组的平均值 grouped[['num_critic_for_reviews','duration','director_facebook_likes']].transform(z_score) ``` ***** ![](https://img.kancloud.cn/d4/fd/d4fd9451aba9097818e2d6d03467a2e2_475x233.png) ### 2.2.3. Filteration 分组过滤 ``` #选出duration平均值大于等于150的分组 grouped.filter(lambda g : g['duration'].mean() >= 150) ``` ![](https://img.kancloud.cn/12/fb/12fbacfcef6ce9bff5e2fdc24c76f5df_1176x236.png) ***** ``` #选出组内数据数目大于等于10的分组 grouped.filter(lambda g : len(g) >=10) ``` ![](https://img.kancloud.cn/27/ab/27ab670eb55e27a9199a4a3c10e6b6d0_1178x365.png)