在DataFrame groupby的开始/结尾处删除nan的最长子序列

时间:2019-02-25 15:17:26

标签: algorithm python-2.7 dataframe group-by

DataFrame df具有3列,即serialno, ids, valuesdf['serialno', 'ids']的升序排序。对于每个ids,使用NaN消除开始/结束行的最有效方法是什么。
示例df在下面定义。在df中,删除ids = 'C'serialno之间以及01234之间4573549999的所有行。但是,应保留带有ids = 'C'serialno = 23455的行。同样,也应保留ids = 'C'serialno = 23566serialno = 24567的行。
另外,所有带有ids = 'A'serialno > 4000的行也应删除。

请注意,原始DataFrame的行数相似,但是ids的唯一值超过3000。因此,重要的是要有高效的算法,而不会遇到内存错误。

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

0 个答案:

没有答案