情景更复杂,所以我认为那里的解决方案不合适
我正在尝试使用以下格式从数据框(100k-500k行)创建子集
d = {'time':[1,2,3,5,7,9,9.5,10], 'val':['not','match','match','not','not','match','match','match'],
'group':['a','a','b','b','b','a','a','c']}
df = pd.DataFrame(d)
print(df)
group time val
0 a 1.0 not
1 a 2.0 match
2 b 3.0 match
3 b 5.0 not
4 b 7.0 not
5 a 9.0 match
6 a 9.5 match
7 c 10.0 match
我想在时间在有限范围内时选择包含所有行的子集。例如,如果range是< = 1,则选择第一行和最后三行,并且来自不同的组
我想要的输出
group time val
1 a 2.0 match
2 b 3.0 match
5 a 9.0 match
6 a 9.5 match
7 c 10.0 match
答案 0 :(得分:1)
这适用于您的示例,希望对您的数据有效:
df.loc[((df['time'].diff() <= 1)|(df['time'].diff(-1) >= -1))&((df['group']!=df['group'].shift(-1).fillna(df['group']))|(df['group']!=df['group'].shift(1).fillna(df['group'])))]