我有一个包含一串单词的列 Token
的数据框。
对于数据框每一行的 Token
列中的字符串,我想计算某些单词出现的次数。
输入:
0 ['uno', 'dos', 'one', 'two', 'tres', 'quatro',...
1 ['uuh', 'sugar', 'pie', 'honey', 'bunch', 'kno...
2 ['cant', 'get', 'satisfaction', 'cant', 'get',...
3 ['woke', 'mornin', 'mind', 'mind', 'got', 'tro...
还有一堆行,但这是格式
我有一个要检查的单词列表
words = ["uno", "dos"]
我尝试执行以下操作
def counter(row):
return len([key for key, val in enumerate(row) if val in set(words)])
df.apply(lambda row: counter(['Token']), axis =1)
然而,这会导致错误的结果,每一行都为零。
预期输出:
0 4
1 5
2 2
3 1
我如何正确地将此函数应用于行的每个元素,或者其他什么函数可以做到这一点。
答案 0 :(得分:1)
问题没有明确定义,在这里猜测:
words = ["uno", "dos"]
df = pd.DataFrame({"Token": ["A uno dos", "B dos tres", "C tres"]})
df["count"] = df.Token.apply(lambda row: len([x for x in words if x in row]))
print(df)
# Output:
Token count
0 A uno dos 2
1 B dos tres 1
2 C tres 0
您的主要问题似乎是您将 ['Token']
传递给 Counter
函数,这是没有意义的,因为这样您正在检查 words
是否包含在字符串中"Token"
。
答案 1 :(得分:1)
在 'Token' 上使用 apply lambda
,然后使用 string.count()
查找字符串中出现的单词。需要对每个单词都这样做,所以使用 list comprehension
words = ["uno", "dos"]
df = pd.DataFrame({"Token":["uno dos khela uno dos","ha ama kau a","aa uno"]})
df["Token_count"] = df.Token.apply(lambda x: sum([x.count(word) for word in words]))
print(df)
Token Token_count
0 uno dos khela uno dos 4
1 ha ama kau a 0
2 aa uno 1