熊猫:基于2列获取前后行

我正在尝试使用pandas获取存储列中不为null的任何记录的前行和后行。但是,我需要根据“键”列对它进行分组,以便它不会从不相关的键中提取其他记录。

数据如下:

Store     Key       Time
          1-1-ABC   1pm
1         1-1-ABC   2pm
          1-1-ABC   3pm
2         1-2-BCD   1pm
          1-2-BCD   2pm
          1-2-BCD   3pm
          1-1-CDE   1pm
          1-1-CDE   2pm
          1-1-CDE   3pm
3         1-1-CDE   4pm
4         2-1-EFG   1pm
          2-1-EFG   2pm
          2-1-EFG   3pm
5         1-3-LMN   1pm
          1-3-LMN   2pm
          1-3-LMN   3pm

结果应如下所示:

Store     Key       Time
          1-1-ABC   1pm
 1        1-1-ABC   2pm
          1-1-ABC   3pm
 2        1-2-BCD   1pm
          1-2-BCD   2pm
          1-1-CDE   3pm
 3        1-1-CDE   4pm
 4        2-1-EFG   1pm
          2-1-EFG   2pm
 5        1-3-LMN   1pm
          1-3-LMN   2pm
BEN_YO

通过使用numpy clip+concatenate

l=[]
for _,df1 in df.groupby('Key'):

    idx=df1.Store.replace('',np.nan).notnull().nonzero()[0]
    l.append(df1.iloc[np.unique(np.clip(np.concatenate(np.array([idx-1,idx,idx+1])),0,len(df1)-1))])


pd.concat(l).sort_index()



Out[196]: 
   Store      Key Time
0         1-1-ABC  1pm
1      1  1-1-ABC  2pm
2         1-1-ABC  3pm
3      2  1-2-BCD  1pm
4         1-2-BCD  2pm
8         1-1-CDE  3pm
9      3  1-1-CDE  4pm
10     4  2-1-EFG  1pm
11        2-1-EFG  2pm
13     5  1-3-LMN  1pm
14        1-3-LMN  2pm

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章