根据列表计算DataFrame中的匹配值

Posted

技术标签:

【中文标题】根据列表计算DataFrame中的匹配值【英文标题】:Count Match value in DataFrame based on list 【发布时间】:2021-11-09 20:29:37 【问题描述】:

我有一个数据框,其中有一些项目标题,例如

ratings_dict = 
    "TYPE": ["Testing","Headphone","Iphone","AC","Laptop","Monitor"],


df = pd.DataFrame(ratings_dict)

想要根据给定的列表计算值:

Search_history=['test','phone','lap','testing','tes','iphone','Headphone','head','Monitor','ac']

预期输出:

注意:在这种情况下,单词“phone”与数据帧“Headphone”和“Iphone”中的 2 个值匹配,然后 Count 将同时递增。

任何建议或代码 sn-p 都会有所帮助。

【问题讨论】:

请不要在您的问题中使用图片:它们不可搜索,也不能复制粘贴。创建可复制粘贴的代码,例如,您的示例数据框可以包含创建它所需的代码。 “任何建议或代码 sn-p 都会有所帮助。”:自己已经尝试过什么?这有助于我们更好地指导您。 pandas.pydata.org/docs/reference/api/… 可能会有所帮助。 您好,感谢您的回复,我已经尝试过df.str.contains 方法但无法获得匹配数。 【参考方案1】:

您需要将所有内容都转换为小写,然后计算 TYPE 是搜索历史项的子字符串的次数,反之亦然

import pandas as pd

ratings_dict = 
    "TYPE": ["Testing","Headphone","Iphone","AC","Laptop","Monitor"],

df = pd.DataFrame(ratings_dict)

Search_history=['test','phone','lap','testing','tes','iphone','Headphone','head','Monitor','ac']

# convert everything to lower case
Search_history = [ x.lower() for x in Search_history]
df['TYPE'] = [ x.lower() for x in df.TYPE]

# count up the number of times one of the TYPEs is a substring of a Search_history or a Search_history is a substring of a TYPE
df['count'] = [ sum( x in y or y in x for y in Search_history) for x in df.TYPE]

【讨论】:

【参考方案2】:

由你来定义什么条件是有意义的,你的问题有点太松散了。您可以检查值是否匹配,也可以在检查之前将一些列表值转换为默认值

【讨论】:

以上是关于根据列表计算DataFrame中的匹配值的主要内容,如果未能解决你的问题,请参考以下文章

创建一个空的 Pandas DataFrame,然后填充它?

pandas为dataframe添加新的数据行(rows)在dataframe后面纵向添加一行数据(数据为列表list形式)列有不匹配将会使用NA值进行填补

如何根据字典中的键/值增加 Python Pandas DataFrame

当这些行与列表中的所有值匹配时,从 Python 中的 DF 中选择行

在 Pandas 中为 DataFrame 中的每一行返回多行

R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行