如何使用pandas的.loc函数按条件保留指定SeqNumber的所有数据行
实现方案
首先假设你的原始DataFrame命名为df,先定义区间参数:
x_min = 3 x_max = 8 y_min = 4 y_max = 6
步骤1:提取符合条件的SeqNumber集合
筛选满足X在指定区间、Y在指定区间且Z为正的样本,取出对应的SeqNumber并去重:
valid_seqs = df.loc[ (df['X'].between(x_min, x_max)) & (df['Y'].between(y_min, y_max)) & (df['Z'] > 0), 'SeqNumber' ].unique()
这里用.between()方法判断是否在闭区间,逻辑与用&连接,每个条件要加括号避免优先级错误,最后用.unique()得到无重复的有效SeqNumber列表。
步骤2:用.loc筛选原始DataFrame
保留原始DataFrame中所有SeqNumber属于上述有效集合的行:
result_df = df.loc[df['SeqNumber'].isin(valid_seqs)]
示例验证
对应你给出的测试数据,第一步筛选得到的valid_seqs为[12],最终result_df会保留所有SeqNumber=12的行,也就是原始数据的前两行,和预期结果一致。
如果不需要分步写,也可以合并为单句实现:
result_df = df.loc[df['SeqNumber'].isin(df.loc[(df['X'].between(x_min,x_max)) & (df['Y'].between(y_min,y_max)) & (df['Z']>0), 'SeqNumber'].unique())]
内容的提问来源于stack exchange,提问作者Luis Ferreira
相关产品推荐
相关产品推荐

