pandas dataframe.groupby, extrae los valores de otras columnas según la relación de tamaño de otra columna

Descripción del problema

Por un lado Dataframe, a veces necesitamos agrupar columnas y, dentro de cada grupo, extraer datos de otras columnas en función de la información de otra columna. Por ejemplo, para los datos de precios de acciones , una acción produce diferentes precios de acciones en diferentes fechas y en diferentes momentos en cada fecha. Si queremos obtener el precio de apertura y el precio de cierre de cada fecha, debemos clasificar las fechas y obtener los datos de precios lo antes posible.

Situación de los datos

Aquí usamos datos generados artificialmente, que son datos públicos en el sitio web del profesor Jeff Heaton. A través del siguiente código, podemos ver que estos datos son datos de stock en diferentes puntos de tiempo todos los días.

import pandas as pd

df = pd.read_csv("https://data.heatonresearch.com/data/t81-558/datasets/series-31.csv")
display(df.head())
tiempo valor
0 22-08-2019 12:51 19.195359
1 19-09-2019 09:44 13.519543
2 26-08-2019 14:05 9.191413
3 19-08-2019 16:37 18.346598
4 05-09-2019 09:18 1.349778

Objetivo

Extraiga el precio de apertura y el precio de cierre de las acciones de cada día, es decir, para cada día, el precio de las acciones correspondiente al punto de tiempo más pequeño.

el código

def extract_date(time):
    return pd.to_datetime(time[:time.find(' ')])

df['date'] = df['time'].map(extract_date)   #把日期单独抽取出来,用于归类
df['time'] = pd.to_datetime(df['time'], errors='coerce')    #转化为datetime类型,可以进行大小的比较

starting_time_idx = df.groupby(['date'])['time'].idxmin()   #idxmin()给出组内部time最小的那行的行数
ending_time_idx = df.groupby(['date'])['time'].idxmax()     #类似idxmin(), idxmax()给出time最大的行数

result_df = pd.DataFrame()
result_df['starting'] = df.loc[starting_time_idx]['value'].values
result_df['ending'] = df.loc[ending_time_idx]['value'].values

Supongo que te gusta

Origin blog.csdn.net/Petersburg/article/details/131064167
Recomendado
Clasificación