如何在Pandas中按子条件删除行:保留仅含Category 2的系统行
解决方案:按子条件删除Pandas数据行
核心思路
先识别出同时包含Category 1和2的系统,再排除这些系统中Category为2的行;其余情况(仅含Category 1的系统、仅含Category 2的系统)全部保留。
代码实现
方法1:分步处理(可读性更高)
import pandas as pd # 示例数据集,替换成你的实际DataFrame即可 df = pd.DataFrame({ 'System': ['A', 'A', 'D', 'D', 'E', 'F', 'B', 'C'], 'Category': [1, 2, 1, 2, 2, 2, 1, 1] }) # 1. 给每行标记所属系统是否同时包含Category 1和2 df['has_both_cats'] = df.groupby('System')['Category'].transform( lambda x: 1 in x.values and 2 in x.values ) # 2. 筛选符合要求的行:排除「系统同时有1和2且Category是2」的行 filtered_df = df[~(df['has_both_cats'] & (df['Category'] == 2))] # 3. 清理临时列(可选) filtered_df = filtered_df.drop('has_both_cats', axis=1)
方法2:一行式简化(无需临时列)
如果不想添加临时列,可以直接把判断逻辑整合到筛选条件里:
filtered_df = df[~( df.groupby('System')['Category'].transform(lambda x: 1 in x.values and 2 in x.values) & (df['Category'] == 2) )]
效果验证
处理后的数据会保留:
- 所有仅含Category 1的系统行(如B、C的所有行)
- 同时含1和2的系统中Category为1的行(如A、D的Category 1行)
- 所有仅含Category 2的系统行(如E、F的所有行)
内容的提问来源于stack exchange,提问作者kalaiyarasi Uma
相关产品推荐
相关产品推荐

