pandas 在特定条件下匹配两个列表

cbeh67ev  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(191)

我有一个2个列表与数据,我想匹配,并收到第三个列表与'真'或'假'。但我需要创造一个特殊的匹配。下面是我的代码。

import pandas as pd

list1 = ['food', 'food', 'item']
list2 = ['apple fr', 'cherry fr', 'banana fr']
my_list1 = list(map(str, list1))
my_list2 = list(map(str, list2))
for i in range(len(my_list2)):
    if my_list2[i] in [s for s in my_list2 if "fr" in s]:
        my_list2[i] = 'food'
result = []
for i in range(int(len(my_list1))):
    result.append(my_list1[i] == my_list2[i])
my_data1 = pd.DataFrame({'a': list1, 'b': list2, 'check': result})
print(my_data1)

输出:

a          b  check
0  food   apple fr   True
1  food  cherry fr   True
2  item  banana fr  False

基本上,我想使用下面的模式匹配列表的元素:如果list2中elem具有'fr',那么它应该在list1中的'food'元素上返回True。
正如你所看到的,我已经有了一种解决方案,我复制列表,编辑它们并比较编辑过的副本。然而,这种方法并不是最好的,因为它确实是内存消耗。也许可以使用“if”条件,而不是操作数据。有没有更好的办法呢?谢谢

f87krz0w

f87krz0w1#

如果我正确理解了这个检查,它只是一个问题“list1中的元素是否等于'food'(df['a'] == 'food'),(&)list2中的元素是否以' fr'(df['b'].str.endswith(' fr'))结尾。

import pandas as pd

list1 = ['food', 'food', 'item', 'food']
list2 = ['apple fr', 'cherry fr', 'banana fr', 'berry us']
df = pd.DataFrame([list1, list2]).T
df.columns = ['a', 'b']
df['check'] = (df['a'] == 'food') & (df['b'].str.endswith(' fr'))
print(df)

印刷品

a          b  check
0  food   apple fr   True
1  food  cherry fr   True
2  item  banana fr  False
3  food   berry us  False

注解:endswith(' fr')当然假设list2的元素只有在以'fr'结尾时才应该匹配,而不是在任何地方都包含'fr',这是if "fr" in s检查的(例如。fr in 'jackfruit'将返回True,尽管我假设您不希望这样)。

wixjitnu

wixjitnu2#

您也可以通过以下方式创建检查列:

check = [list1[i] == ("food" if ("fr" in s) else "item") for i, s in enumerate(list2)]

相关问题