我正在尝试计算两个列表之间的匹配对象(包括重复项)。为此,我具有以下功能:
def counter(row):
return len([key for key, val in enumerate(row) if val in set(words)])
单词是单词列表。当我将此函数与松散字符串一起使用时
lists = ['uno', 'dos', 'one', 'two', 'tres', 'quatro', 'yes', 'wooly', 'bully', 'watch', 'watch', 'come', 'come', 'watch', 'git', 'matty', 'told']
它工作正常,但是当我也将它应用到数据集时
df.apply(lambda row: counter(['Token']), axis=1)
或与
df['Token'] = df['Token'].map(counter)
打印输出每行显示0,而值应该更高
答案 0 :(得分:1)
你可以试试这个:
InvBind
要将带有计数的字典与数据框匹配,您可以这样做:
import pandas as pd
lst = ['uno', 'dos', 'one', 'two', 'tres', 'quatro', 'yes', 'wooly', 'bully', 'watch', 'watch', 'come', 'come', 'watch', 'git', 'matty', 'told']
lst = list(set(lst))
df = pd.DataFrame({'Token':['two', 'two', 'tres', 'tres', 'tres', 'quatro', 'quatro', 'quatro', 'quatro', 'yes', 'cool', 'car', 'cauterize']})
dct = df[df['Token'].isin(lst)]['Token'].value_counts().to_dict()
print(dct)
# {'quatro': 4, 'tres': 3, 'two': 2, 'yes': 1}