我正在尝试使用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
通过使用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] 删除。
我来说两句