我有一个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'^[^_]')