1 企业收入的多样性
>>>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
- 答案:
- 整体思路:首先计算出表2中的收入熵指标(按年的),然后按照证券代码和日期与表1连接(证券代码和日期的格式注意)
- 【代码】
# 导入模块与读取文件 import numpy as np import pandas as pd df1=pd.read_csv('Company.csv') df2=pd.read_csv('Company_data.csv')
# 将表2的日期格式统一 df2['日期']=df2['日期'].\ apply(lambda x:''.join(x[:4])).astype('int64') # 将对象转换为指定类型 print(df2['日期'].head()) print(df1['日期'].head())
0 2008 1 2008 2 2008 3 2008 4 2008 Name: 日期, dtype: int64 0 2014 1 2015 2 2016 3 2017 4 2015 Name: 日期, dtype: int64
# 定义计算收入熵指标的函数
绕进去了,暂时想不清楚了
# 将表1的证券代码格式统一 df1_copy=df1.copy() df1['证券代码']=df1_copy['证券代码'].apply(lambda x:''.join(x[1:])).astype('int64') print(df1['证券代码'].head()) print(df2['证券代码'].head())
0 7 1 403 2 408 3 408 4 426 Name: 证券代码, dtype: int64 0 1 1 1 2 1 3 1 4 1 Name: 证券代码, dtype: int64
# 将表2和表1连接
参考1.
参考2.
2 组队学习信息表的变换
【题目描述】请把组队学习的队伍信息表变换为如下形态,其中“是否队长”一列取1表示队长,否则为0
是否队长 队伍名称 昵称 编号
0 1 你说的都对队 山枫叶纷飞 5
1 0 你说的都对队 蔡 6
2 0 你说的都对队 安慕希 7
3 0 你说的都对队 信仰 8
4 0 你说的都对队 biubiu🙈🙈 20
... ... ... ... ...
141 0 七星联盟 Daisy 63
142 0 七星联盟 One Better 131
143 0 七星联盟 rain 112
144 1 应如是 思无邪 54
145 0 应如是 Justzer0 58
- 答案:
没什么思路。。。。
3 美国大选投票情况
【题目描述】两张数据表中分别给出了美国各县(county)的人口数以及大选的投票情况,请解决以下问题:
-
有多少县满足总投票数超过县人口数的一半
- 答案:
import numpy as np import pandas as pd # 读取两个表 df_cand=pd.read_csv('president_county_candidate.csv') df_pop=pd.read_csv('county_population.csv') print(df_cand.head()) print(df_pop.head())
state county candidate party total_votes won 0 Delaware Kent County Joe Biden DEM 44552 True 1 Delaware Kent County Donald Trump REP 41009 False 2 Delaware Kent County Jo Jorgensen LIB 1044 False 3 Delaware Kent County Howie Hawkins GRN 420 False 4 Delaware New Castle County Joe Biden DEM 195034 True US County Population 0 .Autauga County, Alabama 55869 1 .Baldwin County, Alabama 223234 2 .Barbour County, Alabama 24686 3 .Bibb County, Alabama 22394 4 .Blount County, Alabama 57826
因为最终求的是县的个数,而从上可以看到两个表的county名格式不一致,需要转化为一致的
# 对人口表中的县进行格式修改 # 替换.并且切片到, df_pop['US County']=df_pop['US County']\ .apply(lambda x:x.replace('.','').split(',')[0]) print(df_pop.head())
US County Population 0 Autauga County 55869 1 Baldwin County 223234 2 Barbour County 24686 3 Bibb County 22394 4 Blount County 57826
自己的方法太复杂,借鉴了 参考,使用了字典的方式,不知道有没有其他的简便方法
# 建立字典,键为县名,值为人口数。 dic_pop={x:y for x,y in zip(df_pop['US County'] ,df_pop['Population'])} print(len(dic_pop)) # 1877
# 从投票表中取出州名和投票数字段,建立字典。 # 遍历字典,若投票数大于人口数的1/2,结果加一 dic_cand=df_cand.groupby('county')['total_votes'].sum().to_dict() res=0 for k,v in dic_cand.items(): if k in dic_pop and v > dic_pop[k]//2: res+=1 print(res)
-
把州(state)作为行索引,把投票候选人作为列名,列名的顺序按照候选人在全美的总票数由高到低排序,行列对应的元素为该候选人在该州获得的总票数
# 此处是一个样例,实际的州或人名用原表的英语代替 拜登 川普 威斯康星州 2 1 德克萨斯州 3 4
- 答案:
# 长表变宽表 res=df_cand.pivot_table(index='state' ,columns='candidate' ,values='total_votes' ,aggfunc='sum') # 排序 columns_name= res.sum(0)\ .sort_values(ascending=False).index.tolist() # 变形 res=res.reindex(index=res.index,columns=columns_name) print(res)
-
每一个州下设若干县,定义拜登在该县的得票率减去川普在该县的得票率为该县的BT指标,若某个州所有县BT指标的中位数大于0,则称该州为Biden State,请找出所有的Biden State
-
答案: