Для и если в столбце dataframe - добавить в другой dataframe несколько строк перед

Я пытаюсь запустить свои данные и проверить, больше ли один столбец (дождь), чем 0, в случае, если true, мне нужно взять 100 строк перед индексом i, В случае, если i меньше 100, я проигнорировал его и продолжил прогон, и добавил их в другой фрейм данных. Мой код:

import pandas as pd

data = pd.read_csv('weather_forecast.csv')
data_before_rain = pd.DataFrame()
for index,row in data.iterrows():
    if row['rain'] > 1:
        data_before_rain.append(data.iloc[(index-100):index])

print(data_before_rain)

Пример данных DataFrame:

                  time  ghi  dni  ...  barometric_pressure  rain  sensor_cleaning
0     01/07/2018 07:14   34    0  ...                981.8   0.1                0
1     01/07/2018 07:15   34    0  ...                981.9   0.0                0
2     01/07/2018 07:16   35    0  ...                981.9   0.0                0
3     01/07/2018 07:17   36    0  ...                981.9   0.0                0
4     01/07/2018 07:18   37    0  ...                981.9   0.1                0
5     01/07/2018 07:19   38    0  ...                982.0   0.0                0
6     01/07/2018 07:20   39    0  ...                982.0   0.0                0
7     01/07/2018 07:21   40    0  ...                982.0   0.0                0
8     01/07/2018 07:22   42    0  ...                982.0   0.0                0
9     01/07/2018 07:23   43    0  ...                982.0   0.0                0
10    01/07/2018 07:24   44    0  ...                982.0   0.0                0
11    01/07/2018 07:25   45    0  ...                982.0   0.1                0
12    01/07/2018 07:26   46    0  ...                982.1   0.0                0

Когда я пытаюсь вместо метода append() метод = ( data_before_rain = data.iloc[index-100:index] ), он работает только для последних 100 строк. Когда я пытаюсь append() метод append() :

Empty DataFrame
Columns: []
Index: []

Как я могу это сделать?

Всего 1 ответ


Для данных, отформатированных как ниже:

import pandas as pd
import numpy as np

random_data = np.random.uniform(0, 1, 49)
random_data = np.append(random_data, 1.1)
random_data = np.append(random_data, np.random.uniform(0, 1, 59))
random_data = np.append(random_data, 1.1)
random_data = np.append(random_data, np.random.uniform(0, 1, 139))
random_data = np.append(random_data, 1.1)
random_data = np.append(random_data, np.random.uniform(0, 1, 20))

df = pd.DataFrame({'data':np.linspace(1,150,150), 'rain':random_data})

Найти строки, где rain> 1, найти правильный индекс, который больше 100, и, наконец, получить последние 100 строк, считая из найденного индекса.

fit_list = df.index[df['rain'] > 1].to_list()
proper_index_list = [x for x in fit_list if x > 100]
df_list = []
for index in proper_index_list:
    out = df.iloc[index-100: index]
    df_list.append(out)

df = pd.concat(df_list)

Выход:

           data      rain
9      5.985130  0.105051
..          ...       ...
244  136.152416  0.968460
248  138.368030  0.989770

df_shape = (200, 2)

Есть идеи?

10000