В панде Dataframe у меня есть подгруппы с разным и большим количеством строк.Я хочу уменьшить количество строк для предварительного анализа, одновременно гарантируя, что данные все еще будут репрезентативными во всем диапазоне.
Я провел моделирование с 2-факторами или параметрами ('A','B'
) и 2-уровнямиили значения на коэффициент ('A1','A2','B1','B2'
).Каждое моделирование соответствует комбинации значений 'A','B'
.Симуляция останавливается после того, как счетчик превысил определенное число («35» в приведенном ниже примере).Для каждой симуляции счетчик и его увеличение различны.И на каждом шаге значение 'eval'
суммируется из моделирования.
В приведенном ниже примере показан пример результата моделирования.Теперь симуляция на самом деле выполняется гораздо дольше (скажем, для примера, пока она не превысит 10000), и для построения графика изменения значений eval
в моем предварительном анализе требуются часы.
Этот кодгенерирует выборку результатов моделирования:
import pandas as pd
import numpy as np
columns = ['FactorA', 'FactorB', 'step']
data = [['A1', 'B1', 8], ['A1', 'B1', 13], ['A1', 'B1', 18], ['A1', 'B1', 23], ['A1', 'B1', 28], ['A1', 'B1', 33], ['A1', 'B1', 38],
['A1', 'B2', 7], ['A1', 'B2', 13],['A1', 'B2', 19],['A1', 'B2', 25],['A1', 'B2', 31],['A1', 'B2', 37],
['A2', 'B1', 6], ['A2', 'B1', 14],['A2', 'B1', 22],['A2', 'B1', 30],['A2', 'B1', 38],
['A2', 'B2', 10], ['A2', 'B2', 12],['A2', 'B2', 14],['A2', 'B2', 16],['A2', 'B2', 18],['A2', 'B2', 20],['A2', 'B2', 22],['A2', 'B2', 24],['A2', 'B2', 26],['A2', 'B2', 28],['A2', 'B2', 30],['A2', 'B2', 32],['A2', 'B2', 34],['A2', 'B2', 36]
]
df = pd.DataFrame(data, columns=columns)
df['eval'] = np.random.randint(1, 6, df.shape[0])
Я пробовал это, но, хотя он сокращает количество точек данных, он не уравновешивает количество точек данных за одно моделирование:
df_reduced = df.iloc[::2]
Также попытался:
df_reduced = df.sample(n=int(len(df)/6))
, но он также не уравновешивает количество точек данных за симуляцию.
Мне нужен DataFrame, в котором каждая подгруппа имеет одинаковое количество строк.Чтобы обеспечить сбалансированность выбора или выборки, я хочу, чтобы разделение для каждой подгруппы с использованием .iloc
учитывало шаги, обеспечивающие выбор 'n'
членов для каждой подгруппы.Было бы замечательно, но не обязательно включать первый и последний ряд каждой подгруппы.