gpt4 book ai didi

python - 在拆分句子( Pandas )上使用 isin 时如何获得单词的出现?

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:43 26 4
gpt4 key购买 nike

我正在从事文本分析,并尝试将句子的值(value)量化为分配给某些单词(如果它们在句子中)的值的总和。我有一个带有单词和值的 DF,例如:

import pandas as pd
df_w = pd.DataFrame( { 'word': [ 'high', 'sell', 'hello'],
'value': [ 32, 45, 12] } )

然后我在另一个DF中有句子如:

df_s = pd.DataFrame({'sentence': [ 'hello life if good',
'i sell this at a high price',
'i sell or you sell'] } )

现在,我想在 df_s 中添加一列,如果单词在 df_w 中,则该列包含句子中每个单词值的总和。为此,我尝试了:

df_s['value'] = df_s['sentence'].apply(lambda x: sum(df_w['value'][df_w['word'].isin(x.split(' '))]))

结果是:

                      sentence  value
0 hello life if good 12
1 i sell this at a high price 77
2 i sell or you sell 45

我对这个答案的问题是,对于最后一句话 i sell or you sell,我有两次 sell 并且我期待 90 (2*45) 但是 sell 只被考虑过一次,所以我得到了 45。

为了解决这个问题,我决定创建一个字典,然后执行一个apply:

dict_w = pd.Series(df_w['value'].values,index=df_w['word']).to_dict()
df_s['value'] = df_s['sentence'].apply(lambda x: sum([dict_w[word] for word in x.split(' ') if word in dict_w.keys()]))

这一次,结果如我所料(最后一句90分)。但是我的问题是更大的 DF,对于我的测试用例,使用 dict_w 执行方法的时间比使用 isin 的方法执行时间大约长 20 倍。

您知道在方法中使用 isin 将单词的值乘以它的出现次数的方法吗?也欢迎任何其他解决方案。

最佳答案

您可以使用 str.splitstack 并过滤(isin)结果,替换那些键words 到 value ,然后将其分配回去

s=df_s.sentence.str.split(' ',expand=True).stack()
df_s['Value']=s[s.isin(df_w.word)].replace(dict(zip(df_w.word,df_w.value))).sum(level=0)
df_s
Out[984]:
sentence Value
0 hello life if good 12
1 i sell this at a high price 77
2 i sell or you sell 90

关于python - 在拆分句子( Pandas )上使用 isin 时如何获得单词的出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49903137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com