DataFrame df
具有3列,即serialno, ids, values
。 df
以['serialno', 'ids']
的升序排序。对于每个ids
,使用NaN消除开始/结束行的最有效方法是什么。
示例df
在下面定义。在df
中,删除ids = 'C'
和serialno
之间以及0
和1234
之间45735
和49999
的所有行。但是,应保留带有ids = 'C'
和serialno = 23455
的行。同样,也应保留ids = 'C'
和serialno = 23566
至serialno = 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')