DataFrame df
имеет 3 столбца, а именно serialno, ids, values
.df
отсортировано в порядке возрастания ['serialno', 'ids']
.Какой самый эффективный способ избавиться от начала / окончания строк с NaN для каждого ids
.
Образец df
определен ниже.В df
удалите все строки, где ids = 'C'
и serialno
между 0
& 1234
и между 45735
& 49999
.Однако строки с ids = 'C'
и serialno = 23455
должны быть сохранены.Аналогично, строки с ids = 'C'
и serialno = 23566
до serialno = 24567
также должны быть сохранены.
Кроме того, все строки с ids = 'A'
и serialno > 4000
также должны быть удалены.
Обратите внимание, что исходный DataFrame имеет аналогичное количество строк, но 3000+ уникальных значений для ids
.Поэтому важно иметь эффективный алгоритм, не работающий с ошибкой памяти.
import numpy as np
import pandas as pd
df = pd.DataFrame(10*(2+np.random.randn(500, 26)), columns=list('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
df.loc[df.index>4000, 'A'] = np.nan
df.loc[df.index<=1234, 'C'] = np.nan
df.loc[df.index==23455, 'C'] = np.nan
df.loc[(df.index>=23566) & (df.index<=24567), 'C'] = np.nan
df.loc[(df.index>=45735) & (df.index<=49999), 'C'] = np.nan
df = pd.melt(df.reset_index().rename(columns={'index':'serialno'}), id_vars=['serialno'], var_name='ids', value_name='values')