我正在尝试使用pandas获取存储列中非空的任何记录之前和之后的行。但是,我需要根据Key列对其进行分组,以便它不会从非相关密钥中提取其他记录。
以下是数据:
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
答案 0 :(得分:1)
使用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