Joyful Pandas--综合练习

习题答案参考来源:https://blog.csdn.net/qq_43654994/article/details/105882917
https://blog.csdn.net/KF_Guan/article/details/105879341

部分代码:

import numpy as np
import pandas as pd

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

df = pd.read_csv('数据集/2002年-2018年上海机动车拍照拍卖.csv')
df.head()
(1) 哪一次拍卖的中标率首次小于5%
df['rate']=df['Total number of license issued']/df['Total number of applicants']
df.query('rate <0.05').iloc[0]
(2) 按年统计拍卖最低价的下列统计量:最大值、均值、0.75 分位数,要求显示在同一张表上
df['Month']=df['Date']
df['Year']=df['Date']
df['Month']=df['Month'].agg(lambda x:x[-3:])
df['Year']=df['Year'].agg(lambda x:'200'+x[:-4] if len(x)<6 else '20'+x[:-4])
df.groupby(['Year'])['lowest price '].agg(['max','mean',('0.75',lambda x:np.quantile(x,0.75))]).head()
(3) 将第一列时间列拆分成两个列,一列为年份(格式为 20××),另一列为月份(英语缩写),添加到列表作为第一第二列,并将原表第一列删除, 其他列依次向后顺延
df=df[['Year','Month','Total number of license issued',\
       'lowest price ','avg price','Total number of applicants']]
df.head()
(4) 现在将表格行索引设为多级索引,外层为年份,内层为原表格第二至第五列的变量名,列索引为月份
dff=df.pivot(index='Year',columns='Month',values=df.columns[2:6].tolist())
dff.head()
dff.swaplevel(axis=1).stack()
(5) 一般而言某个月最低价与上月最低价的差额,会与该月均值与上月均值的差额具有相同的正负号,哪些拍卖时间不具有这个特点?
df_pre=df.iloc[:-1][['lowest price ','avg price']]
df_next=df.iloc[1:][['lowest price ','avg price']].reset_index()[['lowest price ','avg price']]
dff=df_next-df_pre
dff['signal']=dff['lowest price ']*dff['avg price']
L=dff['signal']<0
L=L.to_list()
L.insert(0,False)
df[L]
(6) 将某一个月牌照发行量与其前两个月发行量均值的差额定义为发行增益,最初的两个月用0填充,求发行增益极值出现的时间。
df['minus']=0
for i in range(2,len(df),1):
    df['minus'].iloc[i]=df['Total number of license issued'].iloc[i]\
    -np.mean([df['Total number of license issued'].iloc[i-1],df['Total number of license issued'].iloc[i-2]])
df['minus'].idxmax()
df['minus'].idxmin()

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

df = pd.read_csv('数据集/2007年-2019年俄罗斯货运航班运载量.csv')
df.head()
(1) 求每年货运航班总运量
df[['Year','Whole year']].groupby('Year').sum()
(2) 每年记录的机场都是相同的吗?
#不是
df.groupby(['Airport name','Airport coordinates'])['Year'].count()
dff=df.groupby('Airport name')['Year']
print( '有 %d个机场并不是每年都被统计。' %  len(dff.count()[(dff.count())<(2019-2007+1)]))
(3) 按年计算 2010-2015 年全年货运量记录为 0 的机场航班比例。
df1 = df.set_index(['Year'])
groupby_3 = df1.sort_index().loc[2010:2015].groupby('Year')
display(groupby_3['Whole year'].agg( lambda x: print( '年份:', x.index[0], '\t 比例:%.2f' % (len(x[x==0]) / len(x) * 100), '%' ) ))
(4) 若某机场至少存在 5 年或以上满足所有月运量记录都为 0,则将其所有年份的记录信息从表中删除,并返回处理后的表格
c=df.groupby('Airport name')['Whole year'].apply(lambda x:(sum((x==0).tolist())>=5))
alist=c[(c==True)].index.tolist()
df=df[~df['Airport name'].isin(alist)]
df.head()

三、新冠肺炎在美国的传播

df1 = pd.read_csv('数据集/美国确证数.csv')
df2 = pd.read_csv('数据集/美国死亡数.csv')
df1.head()
df2.head()
(1)用 corr() 函数计算县(每行都是一个县)人口与表中最后一天记录日期死亡数的相关系数。
dff=df2[['Admin2','Population',df2.columns[-1]]]
dff.set_index('Admin2')
dff.corr()
(2) 截止到 41 日,统计每个州零感染县的比例
# 时序数据,是累计的,因此只取2020/4/1日
dff=df2[['Province_State','2020/4/1']]
dff['zero']=(dff['2020/4/1']==0)
zeros=dff.groupby('Province_State')['zero'].sum()
counts=dff.groupby('Province_State')['zero'].count()
zeros/counts

你可能感兴趣的:(Joyful Pandas--综合练习)