首页 > 其他分享 >通过groupby将数据分组后提取出来

通过groupby将数据分组后提取出来

时间:2024-04-09 11:14:51浏览次数:22  
标签:plt 提取 name min df3 num 分组 gb groupby

groupby真是个好东西

参考:

python数据分析之Dataframe分组(group by)_dataframe groupby-CSDN博客

【Python】进阶学习:pandas--groupby()用法详解_pandas groupby函数-CSDN博客

get_group

pandas中groupby取出某一组的方法_pandasgroupby分组后 取出分组-CSDN博客

Python 在Python中检查是否(不)在列表中|极客教程 (geek-docs.com)

 Python数据可视化的例子——饼图(pie)_python中pie是什么意思-CSDN博客

问题描述:

提取csv文件中的省市、标准行业字段后,将他们分组,要求知道每个省的某一标准行业字段的数量(问题在于提取)。

 

import matplotlib.pyplot as plt
import pandas as pd

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 显示中文标签,处理中文乱码问题
plt.rcParams['axes.unicode_minus'] = False  # 坐标轴负号的处理
plt.axes(aspect='equal')  # 将横、纵坐标轴标准化处理,确保饼图是一个正圆,否则为椭圆

df = pd.read_csv("result_add.csv", encoding='utf-8')
df3 = df[['省市', '行业标准字段']]
df3_gb = df3.groupby(['省市', '行业标准字段']).value_counts()
pro = []
name_num = []   # 行业名称以及数量
num = []
for i in range(len(df3_gb)):
    if df3_gb.index[i][0] not in pro:
        if len(num) != 0 :
            name_num.append(num)
        pro.append(df3_gb.index[i][0])
        num = [[df3_gb.index[i][1], int(df3_gb.values[i])]]
    else:
        num.append([df3_gb.index[i][1], int(df3_gb.values[i])])
name_num.append(num)
print(pro)
for i in range(len(name_num)):
    print(name_num[i])

 

结果如下:

那如果我想变成这个样子的格式呢:

将代码修改一下即可

pro2=[]
min_name=[]
min_num=[]
name_num2=[]
for i in range(len(df3_gb)):
    if df3_gb.index[i][0] not in pro2:
        if len(min_name) != 0 and len(min_num) !=0 :
            name_num2.append([min_name, min_num])
        pro2.append(df3_gb.index[i][0])
        min_name=[df3_gb.index[i][1]]
        min_num=[df3_gb.values[i]]
    else:
        min_name.append(df3_gb.index[i][1])
        min_num.append(df3_gb.values[i])
name_num2.append([min_name, min_num])
print(pro2)
for i in range(len(name_num2)):
    print(name_num2[i])

 

 ok,有数据后就可以可视化一下了。额 。毁灭吧。什么时候bz

 测试代码如下:

plt.pie(x=name_num2[2][1],  #绘图数据edu
        # explode=explode, #指定饼图某些部分的突出显示,即呈现爆炸式
        labels=name_num2[2][0],  #添加教育水平标签
        # colors=colors,
        autopct='%.2f%%',  #设置百分比的格式,这里保留两位小数
        pctdistance=0.8,  #设置百分比标签与圆心的距离
        labeldistance=1.1,  #设置教育水平标签与圆心的距离
        startangle=180,  #设置饼图的初始角度
        radius=1.2,  #设置饼图的半径
        counterclock=False,  #是否逆时针,这里设置为顺时针方向
        wedgeprops={'linewidth':1.5, 'edgecolor':'green'},  #设置饼图内外边界的属性值
        textprops={'fontsize':10, 'color':'black'},  #设置文本标签的属性值
        )

#添加图标题
plt.title('河北省项目比例')
#显示图形
plt.show()

 

 

当然这是测试指定某一条数据的,那我们需要遍历pro2里面的省份然后画出该省份的比例呢:

def plot_pie(data1,data2,title):
    plt.pie(x=data1,  #绘图数据
            labels=data2,  #添加水平标签
            autopct='%.2f%%',  #设置百分比的格式,这里保留两位小数
            pctdistance=0.9,  #设置百分比标签与圆心的距离
            labeldistance=1.1,  #设置教育水平标签与圆心的距离
            startangle=180,  #设置饼图的初始角度
            radius=1,  #设置饼图的半径
            counterclock=False,  #是否逆时针,这里设置为顺时针方向
            wedgeprops={'linewidth':1.5, 'edgecolor':'green'},  #设置饼图内外边界的属性值
            textprops={'fontsize':10, 'color':'black'},  #设置文本标签的属性值
            )
    plt.title(title)
    plt.show()

for i in range(len(pro2)):
    title=""+pro2[i]+"项目比例"
    plot_pie(name_num2[i][1],name_num2[i][0],title)

不过当数据比较多的时候标签会重合就不美观了,需要的自己修改一下。

 

标签:plt,提取,name,min,df3,num,分组,gb,groupby
From: https://www.cnblogs.com/hmy22466/p/18117290

相关文章

  • Yolov8-pose关键点检测:特征融合 | CAMixing:卷积-注意融合模块和多尺度提取能力 | 202
     ......
  • MySQL分组查询实例
    DDL——学生表,课程表CREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`......
  • jsonpath提取响应结果,token鉴权处理
    importtimeimportuuidimportrequestsimportpprintfromjsonpathimportjsonpathfromtest_image_codeimportImageCodeclassManage:def__init__(self):self.header={"locale":"zh_CN"}self.login_url='......
  • 抖音评论关键词批量下载软件|视频评论提取采集工具
    《视频评论关键词批量采集软件:拓展客户群体,轻松抓取用户需求!》    随着视频平台的迅速发展,视频评论已成为了企业和个人了解用户需求、拓展客户群体的重要途径之一。为了帮助您更高效地抓取并分析视频视频评论,我们推出了全新版本的视频评论关键词批量采集软件,让您轻松......
  • ETL工具-nifi干货系列 第九讲 处理器EvaluateJsonPath,根据JsonPath提取字段
    1、其实这一节课本来按照计划一起学习RouteOnAttribute处理器(相当于java中的ifelse,switchcase控制语句),但是在学习的过程中遇到了一些问题。RouteOnAttribute需要依赖处理器EvaluateJsonPath,所以本节课我们一起来学习下EvaluateJsonPath处理器。如下图所示: 本节课的示例依然......
  • MySQL分组查询以及having筛选
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • MySQL分组查询以及having筛选
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • MySQL分组查询实例2
    DDL——学生表——成绩表 CREATETABLE`class`(`id`int(11)NOTNULLAUTO_INCREMENT,`createdate`datetimeDEFAULTNULL,`username`varchar(255)DEFAULTNULL,`pwd`varchar(255)DEFAULTNULL,`phone`varchar(255)DEFAULTNULL,`age`int(3)......
  • My SQL分组查询以及having筛选
    DDLCREATETABLE`student`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'学号',`createDate`datetimeDEFAULTNULL,`userName`varchar(20)DEFAULTNULL,`pwd`varchar(36)DEFAULTNULL,`phone`varchar(11)DEFAULTNULL,`age`tinyint(......
  • MySql分组查询及having筛选
    DDLCREATETABLE`result`(`rid`int(11)NOTNULLAUTO_INCREMENTCOMMENT'成绩编号',`testName`varchar(255)DEFAULTNULLCOMMENT'测试名称',`score`double(4,2)DEFAULTNULLCOMMENT'成绩',`studentId`int(11)DEFAULTNULLCO......