系统重温Pandas笔记:Task Special:第一次综合练习

2023-12-03 18:50

本文主要是介绍系统重温Pandas笔记:Task Special:第一次综合练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 【任务一】企业收入的多样性
    • 【任务二】组队学习信息表的变换
    • 【任务三】漂亮国投票情况
    • 远昊大佬的参考答案
      • 第一题
      • 第二题
      • 第三题

【任务一】企业收入的多样性

【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标:
在这里插入图片描述
【数据下载】链接:https://pan.baidu.com/s/1leZZctxMUSW55kZY5WwgIw 53 密码:u6fd
解:
首先import所需要的包:

import numpy as np
import pandas as pd

然后读取两张表的数据:

df1 = pd.read_csv('company.csv')
df2 = pd.read_csv('company_data.csv')

对数据做一下清洗,去除含有NAN的行:

df1 = df1.dropna(axis = 0)
df1

在这里插入图片描述

df2 = df2.dropna(axis = 0)
df2

在这里插入图片描述
将df1中证券代码格式里的#号和补零去掉:

df1['证券代码'] = df1['证券代码'].apply(lambda x: int(str(x[1:])))
df1

在这里插入图片描述
将df2中的日期只显示年份:

df2['日期'] = df2['日期'].apply(lambda x: int(str(x[0:4])))
df2

在这里插入图片描述
将df1和df2连接, 并去除掉NAN行:

df3 = df1.merge(df2, on=['证券代码','日期'], how='left')
df3 = df3.dropna(axis = 0)
df3

在这里插入图片描述
计算收入熵指标:

def myfunc(x):p = x/x.sum()res_I = -((p*np.log(p)).sum())return res_I
res = df3.groupby(['证券代码','日期'])['收入额'].apply(myfunc)
res

在这里插入图片描述
将res里的结果变成列:

df4 = res.reset_index()
df4['SHZB_I'] = df4['收入额']
df4 = df4.drop('收入额', 1)
df4

在这里插入图片描述
最后将得到的收入熵指标汇总到df1中:

df5 = df1.merge(df4, on=['证券代码','日期'], how='left')
df5

在这里插入图片描述

【任务二】组队学习信息表的变换

【题目描述】请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0
在这里插入图片描述
【数据下载】链接:https://pan.baidu.com/s/1ses24cTwUCbMx3rvYXaz-Q 34 密码:iz57
解:
首先import所需要的包:

import numpy as np
import pandas as pd
import xlrd

然后读取表的数据:

df1 = pd.read_excel('组队.xlsx')

去掉“所在群”这一列

df1 = df1.drop('所在群', 1)

先处理得到所有队长的表:

df2 = df1[['队伍名称','队长编号','队长_群昵称']]
df2['是否队长'] = 1
df2

在这里插入图片描述
然后修改列名,得到和题目要求匹配的队长表:

df3 = df2.rename(columns = {'队长编号':'编号','队长_群昵称':'昵称'})
df3

在这里插入图片描述
筛选队员相关信息的列,并分别重命名编号和昵称,为后续变形做准备:

df4 = df1.drop(['队长编号','队长_群昵称'], 1)
df4 = df4.rename(columns = {'队员1 编号':'编号_队员1','队员2 编号':'编号_队员2','队员3 编号':'编号_队员3','队员4 编号':'编号_队员4','队员5 编号':'编号_队员5','队员6 编号':'编号_队员6','队员7 编号':'编号_队员7','队员8 编号':'编号_队员8','队员9 编号':'编号_队员9','队员10编号':'编号_队员10'})
df4 = df4.rename(columns = {'队员_群昵称':'昵称_队员1','队员_群昵称.1':'昵称_队员2','队员_群昵称.2':'昵称_队员3','队员_群昵称.3':'昵称_队员4','队员_群昵称.4':'昵称_队员5','队员_群昵称.5':'昵称_队员6','队员_群昵称.6':'昵称_队员7','队员_群昵称.7':'昵称_队员8','队员_群昵称.8':'昵称_队员9','队员_群昵称.9':'昵称_队员10',})

表太大了,先不截图。
然后对得到的表进行wide_to_long操作:

df5 = pd.wide_to_long(df4,stubnames=['编号','昵称'],i = ['队伍名称'],j='队员',sep='_',suffix='.+')
df5

在这里插入图片描述
去掉含有NAN的行,并添加“是否队长”列,重设index,删去“队员”列:

df5 = df5.dropna(axis = 0)
df5['是否队长'] = 0
df6 = df5.reset_index()
df6 = df6.drop(['队员'], 1)
df6

在这里插入图片描述
将队长和队员的信息拼接:

df7 = pd.concat([df3, df6])
df7

在这里插入图片描述
按照题目中的表格样式进行最后的格式调整:

df7 = df7[['是否队长','队伍名称','昵称','编号']]
df7['编号'] = df7['编号'].apply(lambda x: int(x))
df7.sort_values('队伍名称').reset_index().drop(['index'], 1)

在这里插入图片描述

【任务三】漂亮国投票情况

【题目描述】两张数据表中分别给出了漂亮国各县(county)的人口数以及大选的投票情况,请解决以下问题:

  • 有多少县满足总投票数超过县人口数的一半
  • 把州(state)作为行索引,把投票候选人作为列名,列名的顺序按照候选人在全美的总票数由高到低排序,行列对应的元素为该候选人在该州获得的总票数
    在这里插入图片描述
  • 每一个州下设若干县,定义BD在该县的得票率减去CP在该县的得票率为该县的BT指标,若某个州所有县BT指标的中位数大于0,则称该州为BD State,请找出所有的BD State
    【数据下载】链接:https://pan.baidu.com/s/182rr3CpstVux2CFdFd_Pcg 32 提取码:q674
    解:
    1、有多少县满足总投票数超过县人口数的一半
    导入需要的包:
import numpy as np
import pandas as pd

读取数据:

df1=pd.read_csv('president_county_candidate.csv')
df2=pd.read_csv('county_population.csv')

计算县的选票总数:

sum1 = df1.groupby(['state','county'])['total_votes'].sum()
sum1

在这里插入图片描述
将结果转成dataframe,并连接两表,删去NAN值:

df3 = sum1.reset_index()
df3['US County'] = '.'+df3['county']+', '+df3['state']
df3

在这里插入图片描述

df4 = df2.merge(df3, on=['US County'], how='left')
df4 = df4.dropna(axis = 0)
df4

在这里插入图片描述
统计满足总投票数超过县人口数的一半的个数:

condition = df4['total_votes'] > (df4['Population']/2)
df4.groupby(condition).count()

在这里插入图片描述
所以是1434个

2.把州(state)作为行索引,把投票候选人作为列名,列名的顺序按照候选人在全美的总票数由高到低排序,行列对应的元素为该候选人在该州获得的总票数
解:
先按照题目要求变形:

df5 = df1.pivot_table(index='state', columns='candidate', values='total_votes',aggfunc = 'sum')  
df5.head()

在这里插入图片描述
把NaN值用0替换掉

df5 = df5.fillna(0)
df5.head()

在这里插入图片描述
类似第一问,先统计每个州候选人得票总数并排序:

sum2 = df1.groupby(['candidate'])['total_votes'].sum().sort_values(ascending = False)
sum2

在这里插入图片描述
得到列名顺序:

sum2.index

在这里插入图片描述

df6 = df5.reindex(columns=sum2.index)
df6

在这里插入图片描述
3.每一个州下设若干县,定义BD在该县的得票率减去CP在该县的得票率为该县的BT指标,若某个州所有县BT指标的中位数大于0,则称该州为BD State,请找出所有的BD State
解:
因为比较的都是同一个县比,所以比较得票率和比较得票数在最终结果上一样(被除数相同):
还是和前面一样,先计算他们各自的总票数:

df1['US County'] = '.'+df1['county']+', '+df1['state']
df7 = df1.pivot_table(index='US County', columns='candidate', values='total_votes',aggfunc = 'sum')[['Joe Biden','Donald Trump']]  
df7

在这里插入图片描述
然后得到每个县的BT代替值:

df7['BT'] = df7['Joe Biden']-df7['Donald Trump'] 
df7

在这里插入图片描述
去掉多级索引:

df7 = df7.reset_index(['US County'])
df7

在这里插入图片描述
然后将US County拆回去:

df8 = pd.DataFrame((x.split(', ') for x in df7['US County']),columns = ['county','state'])
df8

在这里插入图片描述
重新拼起来:

df9 = pd.concat([df7,df8],1)
df9

在这里插入图片描述
计算各州BT代替值的中位数:

df10 = df9.groupby(['state'])['BT'].median()
df10

在这里插入图片描述
与0作比较:

df10>0

在这里插入图片描述
从结果中可以得出,结果为True的state是Biden State
即:California, Connecticut, Delaware, District of Columbia, Hawaii, Massachusetts, New Jersey, Rhode Island, Vermont 这9个state。

远昊大佬的参考答案

今天给原题加数据链接的时候,看到远昊大佬更新了参考答案,比我的高级太多太多太多太多。在下方展示出来,以供学习:

第一题

df2['证券代码'] = df2['证券代码'].apply(lambda x:'#%06d'%x)
df2 = df2[df2['证券代码'].isin(df1['证券代码'])]
df2['日期'] = df2['日期'].apply(lambda x: int(x[:4]))
res = df2.groupby(['证券代码', '日期'])['收入额'].apply(lambda x: -((x/x.sum()*np.log(x/x.sum()))).sum()).reset_index()
res = df1.merge(res, how='left', on=['证券代码', '日期']).rename(columns={'收入额': '收入熵'})

第二题

df = pd.read_excel('组队信息汇总表(Pandas).xlsx')
temp = df.iloc[:,1::2].set_index('队伍名称').T.reset_index(drop=True)
temp['是否队长'] = np.r_[[1], np.zeros(temp.shape[0]-1)].astype('int')
melted = temp.melt(id_vars = '是否队长', value_vars = temp.columns[:-1], var_name = '队伍名称', value_name = '昵称').dropna().reset_index(drop=True)
number = pd.concat([df.iloc[:, 2*(i+1): 2*(i+2)].T.reset_index(drop=True).T for i in range(11)]).rename({0:'编号', 1:'昵称'}, axis=1).dropna().reset_index(drop=True)
res = melted.merge(number, how='left', on='昵称')

第三题

第一问:

df = pd.read_csv('president_county_candidate.csv')
df_pop = pd.read_csv('county_population.csv')
temp = df_pop['US County'].copy()
df_pop['state'] = temp.apply(lambda x:x.split(', ')[1])
df_pop['county'] = temp.apply(lambda x:x.split(', ')[0][1:])
df_pop = df_pop.drop(['US County'],axis=1)
df = df.merge(df_pop, on=['state','county'],how='left')
df['pop_rate'] = df['total_votes']/df['Population']
res = df.groupby(['state','county'])['pop_rate'].agg(lambda x:x.sum())
(res>0.5).sum()

第二问:

res = df.pivot_table(index='state',columns='candidate',values='total_votes',aggfunc='sum').reindex(df.groupby('candidate')['total_votes'].sum().sort_values(ascending=False).index,axis=1)

第三问:

def select(x):def inner_select(inner_x):Total = inner_x.total_votes.sum()Biden = inner_x.query('candidate=="Joe Biden"').total_votes.sum()Trump = inner_x.query('candidate=="Donald Trump"').total_votes.sum()return (Biden-Trump)/Totalres = x.groupby('county')[['candidate','total_votes']].apply(inner_select)return res.median() > 0
df.groupby('state').filter(select).state.unique()

这篇关于系统重温Pandas笔记:Task Special:第一次综合练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/450497

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav