pandas task06

一、 2002 年-2018 年上海机动车拍照拍卖
问题
(1) 哪一次拍卖的中标率首次小于 5%?
(2) 按年统计拍卖最低价的下列统计量:最大值、均值、 0.75 分位数,要求
显示在同一张表上。
(3) 将第一列时间列拆分成两个列,一列为年份(格式为 20××),另一列为
月份(英语缩写),添加到列表作为第一第二列,并将原表第一列删除,
其他列依次向后顺延。
(4) 现在将表格行索引设为多级索引,外层为年份,内层为原表格第二至第
五列的变量名,列索引为月份。
(5) 一般而言某个月最低价与上月最低价的差额,会与该月均值与上月均值
的差额具有相同的正负号,哪些拍卖时间不具有这个特点?
(6) 将某一个月牌照发行量与其前两个月发行量均值的差额定义为发行增
益,最初的两个月用 0 填充,求发行增益极值出现的时间。

import pandas as pd
import numpy as np
df = pd.read_csv('datalab/62630/2002年-2018年上海机动车拍照拍卖.csv')
df.head()

#1
df['rate']=df['Total number of license issued']/df['Total number of applicants']
df.query('rate <0.05').iloc[0]
#2
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
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
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 年俄罗斯机场货运航班运载量
问题
(1) 求每年货运航班总运量。
(2) 每年记录的机场都是相同的吗?
(3) 按年计算 2010 年-2015 年全年货运量记录为 0 的机场航班比例。
(4) 若某机场至少存在 5 年或以上满足所有月运量记录都为 0,则将其所有
年份的记录信息从表中删除,并返回处理后的表格
(5) 采用一种合理的方式将所有机场划分为东南西北四个分区,并给出 2017
年-2019 年货运总量最大的区域。
(6) 在统计学中常常用秩代表排名,现在规定某个机场某年某个月的秩为该
机场该月在当年所有月份中货运量的排名(例如 *** 机场 19 年 1 月运
量在整个 19 年 12 个月中排名第一,则秩为 1),那么判断某月运量情
况的相对大小的秩方法为将所有机场在该月的秩排名相加,并将这个量
定义为每一个月的秩综合指数,请根据上述定义计算 2016 年 12 个月
的秩综合指数。

#1
df = pd.read_csv('datalab/62630/2007年-2019年俄罗斯货运航班运载量.csv')
df.head()

df[['Year','Whole year']].groupby('Year').sum()

#2
#不是
df.groupby(['Airport name','Airport coordinates'])['Year'].count()

#3
zero_s=len(    df[df['Whole year']==0.00].query('Year >=2010 and Year <=2015')['Airport name'].value_counts())
airports=len(df['Airport name'].value_counts())
zero_s/airports

#4
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()

#5
import re

df['Airport coordinates'][0]

df['area']=''
for i in range(len(df)):
    s=df.iloc[i]['Airport coordinates']
    x,y=re.findall(r"[-+]?\d*\.\d+|\d+",s)
    x=float(x)-90
    y=float(y)-90
    if(abs(y)>=abs(x)):
        if(y>=0):
            df['area'].iloc[i]='north'
        else:
            df['area'].iloc[i]='south'
    else:
        if(x>=0):
            df['area'].iloc[i]='east'
        else:
            df['area'].iloc[i]='west'   
df.head()

df.groupby('area')['Whole year'].sum().index[0]

#6
dff=df[df['Year']==2016]
dff=dff[dff.columns[:-4]].drop(['Year'],axis=1)
dff.head()

dff['rank']=0
dff.set_index('Airport name')
for i in range(len(dff)):
    c=dff.iloc[i].to_list()[1:]
    c=c.index(max(c))+1
    dff['rank'].iloc[i]=c
dff['rank'].sum()/len(dff)

三、COVID-19在us的传播
问题
(1) 用 corr() 函数计算县(每行都是一个县)人口与表中最后一天记录日期
死亡数的相关系数。
(2) 截止到 4 月 1 日,统计每个州零感染县的比例。
(3) 请找出最早出确证病例的三个县。
(4) 按州统计单日死亡增加数,并给出哪个州在哪一天确诊数增加最大(这
里指的是在所有州和所有天两个指标一起算,不是分别算)。
(5) 现需对每个州编制确证与死亡表,第一列为时间,并且起始时间为该州
开始出现死亡比例的那一天,第二列和第三列分别为确证数和死亡数,
每个州需要保存为一个单独的 csv 文件,文件名为“州名.csv”。
(6) 现需对 4 月 1 日至 4 月 10 日编制新增确证数与新增死亡数表,第一列
为州名,第二列和第三列分别为新增确证数和新增死亡数,分别保存为
十个单独的 csv 文件,文件名为“日期.csv”。

#1
df1 = pd.read_csv('datalab/62630/美国确证数.csv')
df2 = pd.read_csv('datalab/62630/美国死亡数.csv')
df1.head()
df2.head()

dff=df2[['Admin2','Population',df2.columns[-1]]]
dff.set_index('Admin2')
dff.corr()

#2
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

#3
dff=df1
num=0
for j in range(12,len(dff.columns),1):
    for i in range(len(dff)):
        if(dff.iloc[i][dff.columns[j]]>1):
            num=num+1
    if(num>=3):
        break
    num=0
for i in range(len(dff)):
    if(dff.iloc[i][dff.columns[j]]>1):
        print(dff.iloc[i]['Admin2'])

#4
dff=df2
for i in range(len(dff.columns)-1,14,-1):
    dff[dff.columns[i]]=dff[dff.columns[i]]-dff[dff.columns[i-1]]
dead_daily=dff[['Province_State']+dff.columns[12:].tolist()].groupby('Province_State').sum()
dead_daily.head()

dead_daily.max().max()

dead_daily.idxmax()[dead_daily.max().idxmax()]

#5
df1 = pd.read_csv('datalab/62630/美国确证数.csv')
df2 = pd.read_csv('datalab/62630/美国死亡数.csv')

df2['Start_date']=1000
for i in range(len(df2)):
    for j in range(12,len(df2.columns)-1,1):
        if(int(df2[df2.columns[j]].iloc[i])>0):
            df2['Start_date'].iloc[i]=float(((df2.columns[j])[5:]).replace('/','.'))
            break

PL=np.sort(list(set(df2['Province_State'].values)))
for i in list(PL):
    A=df1[df1['Province_State']==i]
    B=df2[df2['Province_State']==i]
    save=pd.Series({'Start_date':B['Start_date'].min(),
                       'Concerned':A['2020/4/26'].sum(),
                      'Dead':B['2020/4/26'].sum()})
    save.to_csv(i+'.csv')

#6
dff2=df2
for i in range(len(dff2.columns)-1,14,-1):
    dff2[dff2.columns[i]]=dff2[dff2.columns[i]]-dff2[dff2.columns[i-1]]
dff1=df1
for i in range(len(dff1.columns)-1,14,-1):
    dff1[dff1.columns[i]]=dff1[dff1.columns[i]]-dff1[dff1.columns[i-1]]

for i in range(-26,-16,1):
    date=df2.columns[i]
    A=df1.groupby('Province_State')[df1.columns[i]].sum()
    B=df2.groupby('Province_State')[df2.columns[i]].sum()
    save=pd.DataFrame({'Province':A.index,'Concerned':A.values,'Dead':B.values})
    save.to_csv(str(df2.columns[i]).replace('/','-')+'.csv')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值