Tengo este marco de datos y quiero seleccionar 10 filas antes y después de una columna específica. Llegué hasta este punto, pero me preguntaba cómo hacerlo más elegante en una expresión lambda python, ya que necesito ejecutar esto en un ciclo 10 mil veces.
import pandas as pd df = pd.DataFrame(data=np.random.rand(90), index=pd.date_range('2015-01-01','2015-03-31'),columns=['A'])He llegado a esto como una solución en progreso:
10 observaciones antes y después:
df.loc['2015-01-17':].head(11)[1:11].transpose() ! before df.loc[:'2015-01-17'].tail(11)[0:10].transpose() ! after Entonces, ¿cómo puedo hacer que esto esté en un bucle con una expresión lambda y que no solo tenga un index sino dos indexes ?
Realmente simple usando index.get_loc . Obtenga el índice de la etiqueta y corte en consecuencia.
idx = df.index.get_loc('2015-01-17') df.iloc[idx - 10 : idx + 10] A 2015-01-07 0.262086 2015-01-08 0.836742 2015-01-09 0.094763 2015-01-10 0.133500 2015-01-11 0.285372 2015-01-12 0.338112 2015-01-13 0.451852 2015-01-14 0.163001 2015-01-15 0.247186 2015-01-16 0.227053 2015-01-17 0.837647 2015-01-18 0.918334 2015-01-19 0.514731 2015-01-20 0.207688 2015-01-21 0.700314 2015-01-22 0.363784 2015-01-23 0.811346 2015-01-24 0.079030 2015-01-25 0.051900 2015-01-26 0.520310