Pandas 11-综合练习
import pandas as pd
import numpy as np
np.seterr(all = 'ignore')
{'divide': 'ignore', 'over': 'ignore', 'under': 'ignore', 'invalid': 'ignore'}
【任务一】企业收入的多样性
【题目描述】一个企业的产业收入多样性可以仿照信息熵的概念来定义收入熵指标 :
I=−∑ip(xi)log(p(xi))I=-\sum_i{p(x_i)log(p(x_i))}I=−i∑p(xi)log(p(xi))
其中p(xi)p(x_i)p(xi)是企业该年某产业收入额占该年所有产业总收入的比重。
在company.csv
中存有需要计算的企业和年份 , 在company_data.csv
中存有企业、各类收入额和收入年份的信息。现请利用后一张表中的数据 , 在前一张表中增加一列表示该公司该年份的收入熵指标I
。
【数据下载】链接:https://pan.baidu.com/s/1leZZctxMUSW55kZY5WwgIw 53 密码:u6fd
My solution :
df1 = pd.read_csv('company.csv')
df2 = pd.read_csv('company_data.csv')
df1.head()
|
证券代码
|
日期
|
0
|
#000007
|
2014
|
1
|
#000403
|
2015
|
2
|
#000408
|
2016
|
3
|
#000408
|
2017
|
4
|
#000426
|
2015
|
df2.head()
|
证券代码
|
日期
|
收入类型
|
收入额
|
0
|
1
|
2008/12/31
|
1
|
1.084218e+10
|
1
|
1
|
2008/12/31
|
2
|
1.259789e+10
|
2
|
1
|
2008/12/31
|
3
|
1.451312e+10
|
3
|
1
|
2008/12/31
|
4
|
1.063843e+09
|
4
|
1
|
2008/12/31
|
5
|
8.513880e+08
|
- 经观察两表的证券代码列和日期格式都不一致 , 因当首先变一致
- 将
df1
表中证券代码
列里的#
去掉转为int
- 将
df2
表日期
列取前四位year
转为int
df1_ = df1.copy()
df1_['证券代码'] = df1_['证券代码'].str[1:].astype('int64')
df2['日期'] = df2['日期'].str[:4].astype('int64')
- 定义
entropy
函数计算信息熵 , 并跳过NaN
值
- 用
df1
表左连接df2
表 , 连接列为证券代码和日期 , 再继续对这两列分组 , 取出收入额列用apply
调用信息熵函数 , 重置索引
def entropy(x):if x.any():p = x/x.sum()return -(p*np.log2(p)).sum()return np.nan
res = df1_.merge(df2, on=['证券代码','日期'], how='left').groupby(['证券代码','日期'])['收入额'].apply(entropy).reset_index()
res.head()
|
证券代码
|
日期
|
收入额
|
0
|
7
|
2014
|
4.429740
|
1
|
403
|
2015
|
4.025963
|
2
|
408
|
2016
|
4.066295
|
3
|
408
|
2017
|
NaN
|
4
|
426
|
2015
|
4.449655
|
- 将
df1
表新增一列收入熵指标 , 值为结果表中的收入额
df1['收入熵指标'] = res['收入额']
df1
|
证券代码
|
日期
|
收入熵指标
|
0
|
#000007
|
2014
|
4.429740
|
1
|
#000403
|
2015
|
4.025963
|
2
|
#000408
|
2016
|
4.066295
|
3
|
#000408
|
2017
|
NaN
|
4
|
#000426
|
2015
|
4.449655
|
...
|
...
|
...
|
...
|
1043
|
#600978
|
2011
|
4.788391
|
1044
|
#600978
|
2014
|
4.022378
|
1045
|
#600978
|
2015
|
4.346303
|
1046
|
#600978
|
2016
|
4.358608
|
1047
|
#600978
|
2017
|
NaN
|
1048 rows × 3 columns
def information_entropy():df1 = pd.read_csv('company.csv')df2 = pd.read_csv('company_data.csv')df1_ = df1.copy()df1_['证券代码'] = df1_['证券代码'].str[1:].astype('int64')df2['日期'] = df2['日期'].str[:4].astype('int64')res = df1_.merge(df2, on=['证券代码','日期'], how='left').groupby(['证券代码','日期'])['收入额'].apply(entropy).reset_index()df1['收入熵指标'] = res['收入额']return df1
%timeit -n 5 information_entropy()
1.62 s ± 44.5 ms per loop (mean ± std. dev. of 7 runs, 5 loops each)
【任务二】组队学习信息表的变换
【题目描述】请把组队学习的队伍信息表变换为如下形态,其中'是否队长'
一列取1
表示队长,否则为0
![](/assets/blank.gif)
【数据下载】链接:https://pan.baidu.com/s/1ses24cTwUCbMx3rvYXaz-Q 34 密码:iz57
My solution :
df = pd.read_excel('组队信息汇总表_Pandas.xlsx')
df.drop(columns='所在群', inplace=True)
df.head(2)
|
队伍名称
|
队长编号
|
队长_群昵称
|
队员1 编号
|
队员_群昵称
|
队员2 编号
|
队员_群昵称.1
|
队员3 编号
|
队员_群昵称.2
|
队员4 编号
|
...
|
队员6 编号
|
队员_群昵称.5
|
队员7 编号
|
队员_群昵称.6
|
队员8 编号
|
队员_群昵称.7
|
队员9 编号
|
队员_群昵称.8
|
队员10编号
|
队员_群昵称.9
|
0
|
你说的都对队
|
5
|
山枫叶纷飞
|
6
|
蔡
|
7.0
|
安慕希
|
8.0
|
信仰
|
20.0
|
...
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
1
|
熊猫人
|
175
|
鱼呲呲
|
44
|
Heaven
|
37.0
|
吕青
|
50.0
|
余柳成荫
|
82.0
|
...
|
25.0
|
Never say never
|
55.0
|
K
|
120.0
|
Y.
|
28.0
|
X.Y.Q
|
151.0
|
swrong
|
2 rows × 23 columns
- 为了使用
wide_to_long
将宽表转长表 ,需要先对表columns
进行重命名
- 对照结果表中的名字 , 分别将队长和队员用
leader
和member
区分 , 结果表中队长和队员分别用1
和0
分类 , 不妨在重命名时就先分好类 , 在重命名的末尾追加1
和0
,最后直接取出字符串最后一位即可
col_1 = np.array(['队伍名称','编号_leader01','昵称_leader01'])
col_2 = np.array([[f'编号_member{i}0', f'昵称_member{i}0']for i in range(1,11)]).flatten()
df.columns = np.r_[col_1,col_2]
df.head(2)
|
队伍名称
|
编号_leader01
|
昵称_leader01
|
编号_member10
|
昵称_member10
|
编号_member20
|
昵称_member20
|
编号_member30
|
昵称_member30
|
编号_member40
|
...
|
编号_member60
|
昵称_member60
|
编号_member70
|
昵称_member70
|
编号_member80
|
昵称_member80
|
编号_member90
|
昵称_member90
|
编号_member100
|
昵称_member100
|
0
|
你说的都对队
|
5
|
山枫叶纷飞
|
6
|
蔡
|
7.0
|
安慕希
|
8.0
|
信仰
|
20.0
|
...
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
NaN
|
1
|
熊猫人
|
175
|
鱼呲呲
|
44
|
Heaven
|
37.0
|
吕青
|
50.0
|
余柳成荫
|
82.0
|
...
|
25.0
|
Never say never
|
55.0
|
K
|
120.0
|
Y.
|
28.0
|
X.Y.Q
|
151.0
|
swrong
|
2 rows × 23 columns
- 将重命名好的表用
wide_to_long
转换为长表 , 命名对照结果表 , 省的还要再重命名
- 转换后
dropna
删除NaN
值 , 恢复索引
res = pd.wide_to_long( df.reset_index(),stubnames = ['昵称','编号'],i = ['index','队伍名称'],j = '是否队长',sep = '_',suffix = '.+').dropna().reset_index().drop(columns='index')
res
|
队伍名称
|
是否队长
|
昵称
|
编号
|
0
|
你说的都对队
|
leader01
|
山枫叶纷飞
|
5.0
|
1
|
你说的都对队
|
member10
|
蔡
|
6.0
|
2
|
你说的都对队
|
member20
|
安慕希
|
7.0
|
3
|
你说的都对队
|
member30
|
信仰
|
8.0
|
4
|
你说的都对队
|
member40
|
biubiu
Pandas 11-综合练习相关推荐
- 笔记整理3----Java语言高级(三)11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包修饰符
11 综合练习+12 面向对象-static变量 与 代码块+13 面向对象-继承与抽象类+14 面向对象-接口与多态+15 面向对象-包&修饰符 第11天 综合练习 今日内容介绍 综合练习 ...
- pandas下-综合练习
综合练习 端午节的淘宝粽子交易 端午节的淘宝粽子交易 (1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值. df=pd.read_csv('F:\Datewheel资料\pandas ...
- Pandas可视化综合指南:手把手从零教你绘制数据图表
晓查 编译整理 量子位 出品 | 公众号 QbitAI 数据可视化本来是一个非常复杂的过程,但随着Pandas数据帧plot()函数的出现,使得创建可视化图形变得很容易. 在数据帧上进行操作的plot ...
- 信号完整性分析大作业_Matplotlib数据可视化 amp; Pandas数据分析 综合实训大作业...
csv文件链接 链接:https://pan.baidu.com/s/1-Q9riIfwTWN1AdV2Fb0eVw 提取码:7stb 1.1设置中文以及负数的编码方式,使得其能够正常显示: # re ...
- Pandas Task6——综合练习
第六次-大作业 一.2002 年-2018 年上海机动车拍照拍卖 df_car = pd.read_csv('数据集/2002年-2018年上海机动车拍照拍卖.csv') ##1 df = df_ca ...
- 【2021.11综合方案】Ubuntu + 高通QCA6174无线网卡连接不上WIFI问题解决
背景:win10笔记本,安装Ubuntu18.04LTS系统后,发现没有WIFI接口,搜索不到wifi网络. 参考教程: 解决过程: 1.确定问题:无线打开显示无适配器,猜测无匹配驱动. 2.查看无线 ...
- 九、Pandas高级处理
4.6高级处理-缺失值处理 点击标题即可获取文章源代码和笔记 数据集:https://download.csdn.net/download/weixin_44827418/12548095 Panda ...
- python 去除panda安装包_沉淀,再出发:python中的pandas包
沉淀,再出发:python中的pandas包 一.前言 python中有很多的包,正是因为这些包工具才使得python能够如此强大,无论是在数据处理还是在web开发,python都发挥着重要的作用,下 ...
- python使用pandas模块介绍以及使用,dataframe结构,Series结构,基本数据操作,DataFrame运算,pandas画图,存储,缺失值处理,离散化,合并
目录 1 pandas介绍 1.1 Pandas介绍 1.2 为什么使用Pandas 1.3 案例:在numpy当中创建的股票涨跌幅数据形式 1.4 DataFrame 1.4.1 DataFrame ...
- CTP综合交易平台-开发后感
断断续续的一年时间,终于把这个对接期货交易平台的工作给做成了产品.以下是个人的吐槽. 1.文档 CTP是有好几个文档,但是作为一个软件开发指导,未免也太简陋了. "综合交易平台API说明&q ...
最新文章
- 西电计算机本科学费,陕西高校学费大比拼!你当年的学费现在涨了多少
- 微信小程序 PDF下载打印
- C++数组的左右旋转的实现算法(附完整源码)
- linux中设置环境变量PATH的方法(转)
- 【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具
- 如何准备Java初级和高级技术的面试呢?
- Linux 文件或文件夹重命名命令mv
- 使用Flask-Migrate进行管理数据库升级
- centos 安装图形桌面
- python整数类型与数学-Python类型和运算--数字
- 数据通信与计算机网络第2版,数据通信与计算机网络(第2版)习题1
- CodeforcesRound#498 (Div.3)E题Military Problem
- iTextSharp快速使用指南
- 服务器Socket概述与实例
- b站python up主_python爬取B站up主全部视频封面
- python神经网络编程 代码,python神经网络编程 豆瓣
- 对登录验证功能进行GUI设计
- 蘑菇街App的组件化之路·续
- 鼎信诺虚拟服务器导数,鼎信诺使用手册--自编版.docx
- JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题的解决方法
热门文章
- java-net-php-python-jsp校园美食点评系统计算机毕业设计程序
- Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)
- 乔布斯的3个工作技巧:教你如何得到自己想要的
- Word文档中只删除英文保留中文或删除中文保留英文_陕南赤子_新浪博客
- css sprites 图片精灵自动生成 插件
- Python3 读取中文文件txt编码问题
- 大作业-点灯机器人-记录心得(2)-----基础铺垫-bmp相关
- Dev GridView表格数据转成DataTable
- Oracle Solaris 10图文安装
- 关于solarwinds的一些介绍
|