如何使用Pandas移除全为1或1的组合的DataFrame行?
解决方法
你的代码存在两个问题:
- 逻辑方向错误:当前代码标记的是「行内任意一列是全1组合」的行并移除,但需求是要移除「所有列都是全1组合」的行
- 未处理空格:像
'1, 1'这类带空格的字符串,拆分后会得到['1', ' 1'],直接判断x == '1'会因为空格导致判断失效
下面是修正后的完整代码:
import pandas as pd data = {'A': ['1, 1, 1', '1', '2', '3', '1'], 'B': ['1', '1,1,1,1', '2', '4', '1'], 'C': ['1, 1', '2', '3', '5', '1']} df = pd.DataFrame(data) # 修正判断逻辑:拆分后去除元素空格,再检查是否全为'1' def is_all_ones(value): return all(x.strip() == '1' for x in value.split(',')) # 生成掩码:标记所有列都是全1组合的行(这些是需要移除的) mask = df.apply(lambda row: all(is_all_ones(val) for val in row), axis=1) # 取反保留符合需求的行 df_filtered = df[~mask] # 查看结果 print(df_filtered)
运行后输出结果如下:
A B C 1 1 1,1,1,1 2 2 2 2 3 3 3 4 5
如果需要将结果转回字典格式,执行df_filtered.to_dict('list')即可得到你期望的字典结构。
内容的提问来源于stack exchange,提问作者Itisai
相关产品推荐
相关产品推荐

