Python Pandas 按列表中存在的部分行进行过滤



我有这个数据帧:

df = pandas.DataFrame({'A' : [data1|context1, data2|context2, data3|context3, data4|context4]})

导致:

   A
0  data1|context1
1  data2|context2
2  data3|context3
3  data4|context4

我也有这个列表:

items = ['data1', 'data3']

我想获取没有 | 在列表中。如何仅按每行的左侧进行筛选?我只知道如何按整行过滤,但不知道如何按部分过滤。

这应该是结果:

   A
0  data2|context2
1  data4|context4

编辑:用熊猫观察这个结果会比在列表中获得全面的值更有效?

您可以使用基于匹配的布尔掩码:

import pandas as pd
items = ['data1', 'data3']
df = pd.DataFrame({'A': ['data1|context1', 'data2|context2', 'data3|context3', 'data4|context4']})
mask = df.A.str.match('^(?!{})'.format('|'.join(items)))
result = df[mask]
print(result)

输出

                A
1  data2|context2
3  data4|context4

语句'^(?!{})'.format('|'.join(items))变得^(?!data1|data3),这意味着不要以'data1''data3'开头。如果您更喜欢单行,您可以执行以下操作:

result = df.loc[df.A.str.match('^(?!{})'.format('|'.join(items)))]

使用

df.loc[df['A'].str.split('|').apply(lambda x: x[0] not in items )]

输出

                A
1  data2|context2
3  data4|context4

这可以使用提取来完成

print(df.loc[~df.A.str.extract(r'([^|]+)').isin(items)[0]].reset_index(drop=True))

输出:

                A
0  data2|context2
1  data4|context4

相关内容

  • 没有找到相关文章

最新更新