pandas 学习 - Task06综合练习

2002 年-2018 年上海机动车拍照拍卖

问题 (1) 哪一次拍卖的中标率首次小于 5%?

sh_auc[‘ratio’] = sh_auc.iloc[:,1] / sh_auc.iloc[:,4]
sh_auc[sh_auc[‘ratio’]<0.05].head(1)
月份: 15-May

(2) 按年统计拍卖最低价的下列统计量:最大值、均值、0.75 分位数,要求 显示在同一张表上。

分裂后取出年份
sh_auc[‘Year’] = sh_auc[‘Date’].apply(lambda x: int(x.split(’-’)[0]))

agg = sh_auc.groupby(by = ‘Year’)['lowest price ']
不知道在agg里面如何做quantile, 因此做了两次agg, 然后再merge
agg_q = pd.merge(agg.agg([‘max’,‘mean’]), agg.quantile(0.75), on = ‘Year’)

(3) 将第一列时间列拆分成两个列,一列为年份(格式为 20××),另一列为 月份(英语缩写),添加到列表作为第一第二列,并将原表第一列删除, 其他列依次向后顺延。

sh_auc[‘Year’] = sh_auc[‘Date’].apply(lambda x: int(x.split(’-’)[0])+2000)
sh_auc[‘Month’] = sh_auc[‘Date’].apply(lambda x: x.split(’-’)[1])
sh_auc = sh_auc.drop(columns = ‘Date’)
sh_auc_ym = sh_auc.loc[:,[‘Year’,‘Month’]]
sh_auc = sh_auc.drop(columns = [‘Year’,‘Month’])
sh_auc.insert(0,‘Month’,sh_auc_ym[‘Month’])
sh_auc.insert(0,‘Year’,sh_auc_ym[‘Year’])

(4) 现在将表格行索引设为多级索引,外层为年份,内层为原表格第二至第 五列的变量名,列索引为月份。

主要思路: 先melt 后 pivot_table
sh_auc = sh_auc.melt(id_vars = [‘Year’,‘Month’]
,value_vars = [‘Total number of license issued’,'lowest price ', ‘avg price’, ‘Total number of applicants’]
,var_name = ‘item’, value_name =‘value’ ).set_index([‘Year’,‘item’])

sh_auc.pivot_table(index = [‘Year’,‘item’], columns = ‘Month’, values = ‘value’)
月份还没来得及排序(没想好), 除非是转换成数值, 排序然后再换回来, 想想就觉得好麻烦…

(5) 一般而言某个月最低价与上月最低价的差额,会与该月均值与上月均值 的差额具有相同的正负号,哪些拍卖时间不具有这个特点?

思路: 把月份转换成可排序的数值, 然后按时间排序,
sh_auc[‘Month’] = sh_auc[‘Month’].apply(lambda x: pd.to_datetime(x, format = ‘%b’))
sh_auc[‘Month’] = sh_auc[‘Month’].apply(lambda x: x.month)
sh_auc.sort_values(by = [‘Year’,‘Month’])
排序后通过窗口函数, shift
sh_auc[‘lag_lowerst’] = sh_auc['lowest price '].shift(1)
sh_auc[‘lag_mean’] = sh_auc[‘avg price’].shift(1)

sh_auc[‘delta_lowest’] = sh_auc['lowest price '] - sh_auc[‘lag_lowerst’]
sh_auc[‘delta_mean’] = sh_auc[‘avg price’] - sh_auc[‘lag_mean’]
最后相反代表相乘 小于等于0
sh_auc[sh_auc[‘delta_lowest’]*sh_auc[‘delta_mean’]<=0]

(6) 将某一个月牌照发行量与其前两个月发行量均值的差额定义为发行增 益,最初的两个月用 0 填充,求发行增益极值出现的时间。

sh_auc[‘delta’] = sh_auc[‘avg price’].rolling(2).mean().shift(1)
sh_auc[‘delta’].fillna(0, inplace = True)
sh_auc[‘delta’] = sh_auc[‘avg price’] - sh_auc[‘delta’]
sh_auc.loc[sh_auc[‘delta’].idxmax()][‘Date’]
‘11-Feb’

二、2007 年-2019 年机场货运航班运载量

(1) 求每年货运航班总运量。

rus_load.groupby(‘Year’)[‘Whole year’].sum()

(2) 每年记录的机场都是相同的吗

ap_name = rus_load.groupby(by = ‘Year’)[‘Airport name’].unique()
for y in ap_name.index:
print(y, len(ap_name[y]))
发现18年19年机场数量与其他年份不同,其他年份均为288
因此每年记录的机场不完全相同.

(3) 按年计算 2010 年-2015 年全年货运量记录为 0 的机场航班比例。

获取每年机场航班
ap_cnt = rus_load.groupby(by = ‘Year’)[‘Whole year’].count()
货运为0 的数量
ap_zero = rus_load[rus_load[‘Whole year’] == 0].groupby(by = ‘Year’)[‘Whole year’].count()
得到比例筛选出2010-2015即可
ap_zero / ap_cnt

(4) 若某机场至少存在 5 年或以上满足所有月运量记录都为 0,则将其所有 年份的记录信息从表中删除,并返回处理后的表格

发现机场有重名, 但坐标不同, 因此groupby的时候加入坐标选项
ap_zero_cnt = rus_load[rus_load[‘Whole year’] == 0].groupby(by = [‘Airport name’, ‘Airport coordinates’])[‘Year’].count()
筛选出数量大于5的机场
ap_zero_cnt = ap_zero_cnt[ap_zero_cnt > 5]
rus_load = rus_load.set_index([‘Airport name’, ‘Airport coordinates’])
取反即可
rus_load[~rus_load.index.isin(ap_zero_cnt.index)]

(5) 采用一种合理的方式将所有机场划分为东南西北四个分区,并给出 2017 年-2019 年货运总量最大的区域。

不知道如何从字符串中提取坐标, 只好羞愧的唠叨一下思路.
提取坐标后, 分经度纬度, 然后分别计算 经度均值, 纬度均值
每个机场计算 与经度均值, 纬度均值的差, 在计算比值, arctan求得角度, 便可以判断东南西北

(6) 在统计学中常常用秩代表排名,现在规定某个机场某年某个月的秩为该 机场该月在当年所有月份中货运量的排名(例如 *** 机场 19 年 1 月运 量在整个 19 年 12 个月中排名第一,则秩为 1),那么判断某月运量情 况的相对大小的秩方法为将所有机场在该月的秩排名相加,并将这个量 定义为每一个月的秩综合指数,请根据上述定义计算 2016 年 12 个月 的秩综合指数。

此题没搞清楚rank是所有机场排序还是单机场排序, 本人按照所有机场排序进行统计
rus_load_2 = rus_load_2[rus_load_2[‘Year’] == 2016]
rus_load_2 = rus_load_2.melt(id_vars = ‘Airport name’, value_vars = rus_load_2.columns.values[2:14], var_name = ‘Month’, value_name = ‘volumn’)
得到排序
rus_load_2[‘rank’] = rus_load_2[‘volumn’].rank()
分组求和即可
rus_load_2.groupby(by = ‘Month’)[‘rank’].sum()

传播

(1) 用 corr() 函数计算县(每行都是一个县)人口与表中最后一天记录日期 某数的相关系数。

cov_dea[[‘Population’,‘2020/4/26’]].corr()
0.404

(2) 截止到 4 月 1 日,统计每个州零县的比例。

cov_stat_cnt = cov_confirm.groupby(by = [‘Country_Region’,‘Province_State’])[‘Admin2’].count()
cov_zero_cnt = cov_confirm[cov_confirm[‘2020/4/1’] == 0].groupby(by = [‘Country_Region’,‘Province_State’])[‘Admin2’].count()
sh = cov_zero_cnt / cov_stat_cnt
由于存在个别州不存在0, 会出现缺失, 因此缺失的补0, 代表100%
sh.fillna(0)

(3) 请找出最早的三个县。

con_melt = cov_confirm.melt(id_vars = [‘Province_State’, ‘Admin2’], value_vars = cov_confirm.columns.values[11:106], var_name = ‘Date’, value_name = ‘Confirmed’)
dea_melt = cov_dea.melt(id_vars = [‘Province_State’, ‘Admin2’], value_vars = cov_confirm.columns.values[12:107], var_name = ‘Date’, value_name = ‘Dea’)
原始日期已排好序, 因此直接取出每个县前1条记录再取出综合前3条记录即可
con_melt[con_melt[‘Confirmed’] > 0].groupby(by = [‘Province_State’, ‘Admin2’]).head(1).head(3)
分别是 Washington King, Illinois Cook, Arizona Maricopa

(4) 统计数, 指出增加最快的天。

先melt
dea_melt = cov_dea.melt(id_vars = [‘Province_State’, ‘Admin2’], value_vars = cov_confirm.columns.values[12:107], var_name = ‘Date’, value_name = ‘Dea’)
按洲汇总
dea_melt = dea_melt.groupby(by = [‘Province_State’,‘Date’])[‘Dea’].sum().reset_index()
转日期
dea_melt[‘Date’] = pd.to_datetime(dea_melt[‘Date’], format = ‘%Y/%m/%d’)
排序
dea_melt = dea_melt.sort_values(by = [‘Province_State’,‘Date’])
dea_melt[‘Dea_lag’] = dea_melt.groupby(by = [‘Province_State’])[‘Dea’].shift(1)
dea_melt[‘add_dea’] = dea_melt[‘Dea’] - dea_melt[‘Dea_lag’]
dea_melt.sort_values(by = ‘add_dea’, ascending = False)

New York 2020-04-07 1270.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值