基于Pandas字段的Pandas筛选,该字段包含字符串列表中的连接字符串

2024-03-29 11:23:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用这种方法进行数据帧过滤

reduced_df = full_df[(full_df['field1'] == some_defined_value1) & \
                     (full_df['field2'] == some_defined_value2) & \
                     (full_df['field3'].apply(lambda x: x for x in ','.join(list_of_comma_separated_string))) & \
                     (full_df['field4'].apply(lambda x: x for x in ','.join(list_of_comma_separated_string)))]

我被卡在了。应用部分。如果field3值在字符串列表中,那么我要做的是将该行引入。例如:

如果与

field3 = 'apples,oranges,bananas'  # please note it is a single string

我有一个

list_of_comma_separated_string = ['apples', 'oranges', 'bananas', 'grapes', 'peaches']

然后,该行应包含在缩减的_df中。然而如果

field3 = 'melons,avacado,mint' 

则该行不应包含在缩减的_df中

我尝试了几种方法(这是我最新的尝试),但似乎都不管用。这是一个返回错误: 生成器对象不可调用

多谢各位


Tags: of方法lambdaindfforstringsome
1条回答
网友
1楼 · 发布于 2024-03-29 11:23:53

splitexplode(需要0.25)字符串,然后检查any单词isin列表l(不需要长名称)

df['field3'].str.split(',').explode().isin(l).any(level=0)

样本:

import pandas as pd
df = pd.DataFrame({'field1': [1, 1, 2],
                   'field2': [7, 8, 5],
                   'field3': ['apples,oranges,bananas', 'melons,avacado,mint',
                              'crabapples,foo']})
l = ['apples', 'oranges', 'bananas', 'grapes', 'peaches']

df['field3'].str.split(',').explode().isin(l).any(level=0)
#0     True
#1    False
#2    False
#Name: field3, dtype: bool

然后,您可以将您的条件写为:

m = (df['field1'].eq(some_val1) 
     & df['field2'].eq(some_val2) 
     & df['field3'].str.split(',').explode().isin(l).any(level=0)
     & df['field4'].str.split(',').explode().isin(l).any(level=0))

相关问题 更多 >