Удаление первой части многоиндексированного df на основе события

#python #pandas #dataframe #multi-index

#питон #панды #фрейм данных #многоиндексный

Вопрос:

У меня есть следующий фрейм данных:

 import pandas as pd  df = pd.DataFrame(  (  {  "foo": ["1", "1", "1", "1", "2", "2", "2", "2"],  "bar": ["1", "2", "3", "4", "1", "2", "3", "4"],  "info": [1, 2, 3, 4, 5, 6, 7, 8],  "event": [0, 0, 1, 0, 0, 1, 0, 0],  }  ) ) # set multiindex df.set_index(["foo", "bar"], inplace=True)  print(df)  info event foo bar 1 1 1 0  2 2 0  3 3 1  4 4 0 2 1 5 0  2 6 1  3 7 0  4 8 0  

Я хотел бы разрезать фрейм данных только для сохранения строк после события == 1:

фу бар ценности событие
1 3 3 1
1 4 4 0
2 2 6 1
2 3 7 0
2 4 8 0

Частота дискретизации достаточно высока, чтобы я мог отбросить строки 1, но предпочел бы сохранить их, если это возможно.

Комментарии:

1. Какой результат вы пытаетесь получить?

2. Стол, который там стоит. Он сбрасывает первые 2 в foo:1 и первые 1 в foo:2

Ответ №1:

Вы могли бы попробовать вот так:

 # Get relevant indices index_of_first_event = df.loc[("1", "1"):, "event"].eq(1).idxmax() last_index_of_first_sub_dataframe = ("1", str(df.loc[("1", ), :].shape[0])) index_of_second_event = df.loc[("2", "1"):, "event"].eq(1).idxmax()  # Get new dataframe new_df = pd.concat(  [  df.loc[index_of_first_event:last_index_of_first_sub_dataframe, :],  df.loc[index_of_second_event:, :],  ] )  print(new_df) # Output  info event foo bar 1 3 3 1  4 4 0 2 2 6 1  3 7 0  4 8 0  

Ответ №2:

То, что я в итоге сделал, было:

 1.Mapped 0-gt;na 2.Back-filled the event column 3.Dropped all 1's