Tutorial completo de ejercicios de pandas (Parte 1)

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

Inserte la descripción de la imagen aquí
(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()

Inserte la descripción de la imagen aquí
(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)

Inserte la descripción de la imagen aquí
(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.

Supongo que te gusta

Origin blog.csdn.net/OuDiShenmiss/article/details/105883771
Recomendado
Clasificación