1. Emisiones de subasta de licencias de vehículos de motor de Shanghai de 2002 a 2018
>>> import numpy as np
>>> import pandas as pd
>>> from IPython.core.interactiveshell import InteractiveShell
# 不用print,直接显示结果
>>> InteractiveShell.ast_node_interactivity = "all"
# 显示所有列
>>> pd.set_option('display.max_columns', 600)
# MVL = Motor Vehicle License
>>> MVL = pd.read_csv('General Exercises/2002年-2018年上海机动车牌照拍卖.csv')
>>> MVL.head()
(1) ¿Qué subasta tiene una tasa de ganancia inferior al 5% por primera vez?
>>> MVL["ratio"] = MVL["Total number of license issued"]/MVL["Total number of applicants"]
>>> MVL.head()
>>> MVL[MVL["ratio"]<0.05]["Date"].values[0]
'15-May'
(3) Divida la primera columna de la columna de tiempo en dos columnas, una es el año (formato 20 × ×) y la otra es el mes (abreviatura en inglés), agréguelo a la lista como la primera y segunda columna y agregue la tabla original La primera columna se elimina y las otras columnas se extienden hacia atrás.
>>> MVL["year"]= MVL["Date"].apply(lambda x:x.split("-")[0])
>>> MVL["month"] = MVL["Date"].apply(lambda x:x.split("-")[1])
>>> MVL["year"] = MVL["year"].apply(lambda x:"200"+x if len(x)==1 else "20"+x)
>>> MVL_new =MVL.reindex(columns=["year","month","Date","Total number of license issued","lowest price ","avg price","Total number of applicants","ratio"])
>>> MVL_new = MVL_new.drop(columns="Date")
>>> MVL_new.head()
(2) Las siguientes estadísticas del precio de subasta más bajo se cuentan anualmente: el valor máximo, el valor promedio y el cuantil de 0,75, que deben mostrarse en la misma tabla.
>>> from collections import OrderedDict
>>> groupedyear = MVL_new.groupby('year')
>>> def f(df):
>>> data = OrderedDict()
>>> data['LP_max'] = MVL["lowest price "].max()
>>> data['LP_mean'] = MVL['lowest price '].mean()
>>> data['LP_075'] = MVL['lowest price '].quantile(q=0.75)
>>> return pd.Series(data)
>>> groupedyear.apply(f)
LP_max LP_mean LP_075
year
2002 93500.0 53197.044335 77050.0
2003 93500.0 53197.044335 77050.0
2004 93500.0 53197.044335 77050.0
2005 93500.0 53197.044335 77050.0
2006 93500.0 53197.044335 77050.0
2007 93500.0 53197.044335 77050.0
2008 93500.0 53197.044335 77050.0
2009 93500.0 53197.044335 77050.0
2010 93500.0 53197.044335 77050.0
2011 93500.0 53197.044335 77050.0
2012 93500.0 53197.044335 77050.0
2013 93500.0 53197.044335 77050.0
2014 93500.0 53197.044335 77050.0
2015 93500.0 53197.044335 77050.0
2016 93500.0 53197.044335 77050.0
2017 93500.0 53197.044335 77050.0
2018 93500.0 53197.044335 77050.0
(4) Ahora configure el índice de filas de la tabla como un índice de varios niveles, la capa externa es el año, la capa interna es el nombre de la variable de la segunda a la quinta columna de la tabla original y el índice de la columna es el mes.
>>> Month = MVL_new.iloc[0:12,1].to_list()
>>> result = MVL_new.melt(id_vars=['year','month'],value_vars=['Total number of license issued','lowest price ','avg price','Total number of applicants'],value_name='info')
>>> result.pivot_table(index = ['year','variable'],columns='month',values='info',fill_value='-').reindex(columns = Month)
(5) En general, la diferencia entre el precio más bajo de un mes determinado y el precio más bajo del mes anterior tendrá el mismo signo que la diferencia entre el promedio mensual y el promedio del mes anterior. ¿Qué horarios de subasta no tienen esta característica?
>>> print('[最低价、均值]与上月差额不同号的有:')
>>> for index in MVL_new.index:
>>> try:
>>> signal = (MVL_new.loc[index,'lowest price ']- MVL_new.loc[index+1,'lowest price '])*\
(MVL_new.loc[index,'avg price'] - MVL_new.loc[index+1,'avg price'])
>>> if signal<0:
>>> print(MVL_new.loc[index+1,['year','month']])
>>> print('\n')
>>> except:
>>> break
[最低价、均值]与上月差额不同号的有:
year 2003
month Oct
Name: 21, dtype: object
year 2003
month Nov
Name: 22, dtype: object
year 2004
month Jun
Name: 29, dtype: object
year 2005
month Jan
Name: 36, dtype: object
year 2005
month Feb
Name: 37, dtype: object
year 2005
month Sep
Name: 44, dtype: object
year 2006
month May
Name: 52, dtype: object
year 2006
month Sep
Name: 56, dtype: object
year 2007
month Jan
Name: 60, dtype: object
year 2007
month Feb
Name: 61, dtype: object
year 2007
month Dec
Name: 71, dtype: object
year 2012
month Oct
Name: 128, dtype: object
(6) La diferencia entre el volumen de emisión de un mes determinado y el promedio de los dos meses anteriores se define como la ganancia de emisión, los dos primeros meses se rellenan con 0 para encontrar el momento en que aparece el valor extremo de la ganancia de emisión.
>>> MVL2 = MVL_new.copy()
>>> MVL2['发行增益']=0
>>> for index in MVL2.index:
>>> if index<2:continue
>>> MVL2.loc[index,'发行增益']= MVL2.loc[index,'Total number of license issued']-(MVL2.loc[index-1,'Total number of license issued']+
>>> MVL2.loc[index-2,'Total number of license issued'])/2
>>> print("最小",MVL2.loc[MVL2["发行增益"] == MVL2["发行增益"].min()][['year','month']].head())
>>> print("最大",MVL2.loc[MVL2["发行增益"] == MVL2["发行增益"].max()][['year','month']].head())
最小 year month
74 2008 Apr
最大 year month
72 2008 Jan
Referencia: https://github.com/datawhalechina/joyful-pandas
Sobre Datawhale
Datawhale es una organización de código abierto que se centra en la ciencia de datos y la inteligencia artificial. Reúne a estudiantes excelentes de muchas universidades y empresas reconocidas en muchos campos, y reúne a un grupo de miembros del equipo con espíritu de código abierto y exploratorio. Con la visión de "para el alumno, crecer con los alumnos", Datawhale fomenta la verdadera autoexpresión, la apertura y la tolerancia, la confianza mutua y la asistencia mutua, el valor para intentar cometer errores y el valor para asumir la responsabilidad. Al mismo tiempo, Datawhale utiliza el concepto de código abierto para explorar contenido de código abierto, aprendizaje de código abierto y soluciones de código abierto, potenciar la formación del talento, ayudar al crecimiento del talento y establecer una conexión entre personas, personas y conocimiento, personas y empresas, y personas y el futuro.