我正在try 删除其所有值都相同或相同值的组合的行.

例如,我有一个数据帧,比如

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']}

我要删除所有列中的值为"1"或"1"的任意组合的行. 最终结果应该类似于:

data = {'A': ['1', '2', '3'], 'B': ['1,1,1,1', '2', '4'], 'C': ['2', '3', '5']}

我试过了

def remove_rows_with_ones(value):
    return all(x == '1' for x in value.split(','))

mask = df.apply(lambda row: any(remove_rows_with_ones(val) for val in row), axis=1)
df_filtered = df[~mask]

但它似乎并没有奏效.任何帮助都会被感谢.

推荐答案

您可以转换为字符串并判断每个单元格是否包含除1(或空格/逗号)以外的字符,如果至少有一个为True,则保留该行:

out = df[df.apply(lambda s: s.astype(str).str.contains('[^1 ,]')).any(axis=1)]

或者,按照你最初的 idea ,在', '上拆分字符串:

import re

out = df[~df.applymap(lambda c: all(x=='1' for x in re.split(', *', c))).all(axis=1)]

# pandas ≥ 2.1
out = df[~df.map(lambda c: all(x=='1' for x in re.split(', *', c))).all(axis=1)]

输出:

   A        B  C
1  1  1,1,1,1  2
2  2        2  3
3  3        4  5

中间体:

# df.apply(lambda s: s.astype(str).str.contains('[^1 ,]'))
       A      B      C
0  False  False  False
1  False  False   True
2   True   True   True
3   True   True   True
4  False  False  False

# df.map(lambda c: all(x=='1' for x in re.split(', *', c)))
       A      B      C
0   True   True   True
1   True   True  False
2  False  False  False
3  False  False  False
4   True   True   True

Python相关问答推荐

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

Python键入协议默认值

如何更改分组条形图中条形图的 colored颜色 ?

pyscript中的压痕问题

组/群集按字符串中的子字符串或子字符串中的字符串轮询数据框

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

在单个对象中解析多个Python数据帧

joblib:无法从父目录的另一个子文件夹加载转储模型

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

如何合并两个列表,并获得每个索引值最高的列表名称?

启动带有参数的Python NTFS会导致文件路径混乱

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

如何使用正则表达式修改toml文件中指定字段中的参数值

如何根据rame中的列值分别分组值

如何在验证文本列表时使正则表达式无序?

仅使用预先计算的排序获取排序元素

如何在Airflow执行日期中保留日期并将时间转换为00:00

python3中np. divide(x,y)和x/y有什么区别?'

对当前的鼹鼠进行编码,并且我的按键获得了注册