如何解决根据文本匹配和来自多个字段的条件创建新字段 Python
我有一个这样的数据框,我想根据匹配“评论”字段中的某些词和某些“产品”类型来分配一个新类别。我为每个类别创建了两个具有不同 n-gram 的列表,我需要根据列表中与“评论”中的词匹配的词选择“我的类别”和某些产品类型(任何选择的产品类型)。如果需要,代码需要分配多个类别。
记录ID | 产品 | 回顾 | 我的类别 |
---|---|---|---|
123 | 平板电脑 | 电池寿命很糟糕。不买。 | 类别 1 |
456 | 笔记本电脑 | 喜欢时尚的设计,但电池寿命很短。 | 类别 2 |
789 | 平板电脑 | 我喜欢它,尽管有时它很糟糕。 | 类别 1,类别 2 |
我的代码根据列表中的单词匹配分配了单个和多个类别,但我不明白为什么它没有考虑产品类型。
Category_1 = [" battery ","sucks "]
Category_2 = [" battery "," love "," design ","thin"]
df['My Category']= ''
for index,row in df.iterrows():
data=df['Description'].iloc[index]
check=["true" for word in Category_1 if(word in data)]
if("true" in check) & df['Product'].isin(['tablet']).any():
df['My Category'].iloc[index] = df['My Category'].iloc[index] + ',' + 'Category 1'
check=["true" for word in Category_2 if(word in data)]
if("true" in check) & df['Product'].isin(['tablet','laptop']).any():
df['My Category'].iloc[index] = df['My Category'].iloc[index] + ',' + 'Category 2'
如果 Review 包含任何单词,则基本上属于第 1 类 [“电池”,“很烂”] AND 产品是平板电脑。 第 2 类,如果评论中包含 [“battery”、“love”、“design”、“thin”] 和 产品是笔记本电脑或平板电脑。类别并不相互排斥。
" & df['Product'].isin(['product types'])).any(): " 部分没有做任何事情,谁能告诉为什么或如何做解决了吗?
解决方法
您应该使用 apply
来完成此任务。
from io import StringIO
from io import StringIO
data = StringIO("""
Record ID Product Review
123 Tablet Battery life sucks.
456 Laptop Love the sleek design,but battery life is bad.
789 Tablet I love it,even though it sucks sometimes.
""")
df = pd.read_csv(data,sep='\t')
def categorize(row):
"""Gets category from row
Can access columns with dot notation,e.g.,row.Product
"""
# determine categories
#return categories
df['categories'] = df.apply(categorize,axis=1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。