Удалить самую длинную подпоследовательность nan в начале / конце группы DataFrame - PullRequest
0 голосов
/ 25 февраля 2019

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')
...