You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于DataFrame第二列值筛选第一列并保留对应重复行?

解决方案

方法1:先提取有效设备再筛选

最直接的做法是先找出所有存在非空维护代码的设备,再保留这些设备的所有记录:

# 过滤出有维护代码的设备,去重得到有效设备集合
valid_devices = df[df['Revision'].str.strip() != '']['Functional Loc.'].unique()

# 筛选原表中属于有效设备的所有行
df_filtered = df[df['Functional Loc.'].isin(valid_devices)]

方法2:修正你的groupby过滤逻辑

你用groupby.filter的方向没错,但lambda条件写反了逻辑——原代码是逐行判断是否非空,所以只会留下非空行;正确的逻辑是判断整个设备组里有没有至少一行非空维护代码,只需要给条件加个.any():

# 只要设备组内存在非空维护代码,就保留该组所有行
df_filtered = df.groupby('Functional Loc.').filter(lambda x: (x['Revision'].str.strip() != '').any())

原代码问题出在哪?

你写的lambda x: (x['Revision']!='')会返回一个布尔数组,groupby.filter会把数组里为True的行单独保留,相当于直接删掉了所有空行,而不是保留整个设备组。加上.any()后,会检查该设备组是否满足“至少有一行非空”,满足就保留整个组的所有行,包括空行。

结果验证

运行上述代码后,所有维护代码全为空的设备(比如示例里的FE07、JU01等)会被过滤掉,有过维护代码记录的设备(ET01B、ET02A、ET02B)的所有行都会被保留,完全符合你的期望输出。


内容的提问来源于stack exchange,提问作者slabbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:12:34