隔离特定列中具有相同值的数据帧行的有效方法是什么



我有一个Pandas DataFrame,它看起来像这样:

AA,    BB,    CC,    _id1,     _id2,     _id3
"foo", "foo", "foo", "1A1A1A", "1A1A1A", "1A1A1A"
"foo", "foo", "foo", "2B2B2B", "4L4L4L", "2B2B2B"

我想隔离具有不完全相同的_id值的行。在上面的示例中,它将隔离第二行,而忽略第一行。

我不知道在任何给定的运行中会有多少_id列(需要检查(,它们的名称也会有所不同(但可以作为字符串列表使用:id_column_names。这些名称也总是有_id前缀。

这里有没有任何合理有效的表操作(或者至少是序列操作(?

当然,我可以写一些函数(迭代和相关的行值(,并按行apply(),但有更好的选择吗?

首先用DataFrame.filter过滤_id列,然后用DataFrame.all测试DataFrame.eq与第一列的值是否相同:

df1 = df.filter(regex='^_id')
df = df[~df1.eq(df1.iloc[:, 0], axis=0).all(axis=1)]
print (df)
AA   BB   CC    _id1    _id2    _id3
1  foo  foo  foo  2B2B2B  4L4L4L  2B2B2B

是的,使用df.filter:

df.filter(regex=r'^[_]')

删除这些:

df.filter(regex=r'^[^_]')

最新更新