在这里赢不了。需要使用传递到dataframe的免费文本字段来查找第二个数据帧中的不同列:
df1 = pd.read_csv('Hotel_reviews.csv') .用户:评论:朱莉的床单脏了‘萨曼莎’的饭菜来了,冷的‘瑞秋’鸡尾酒很好吃‘]。
想象一下^上面的大量数据
df2 =[{‘关键字’:‘床单’,‘鸡尾酒’,‘餐’,‘部门’:‘卧室’,‘餐厅’,‘餐厅’,‘问题类型’:‘床’,‘饮料’,‘食物’}]
我尝试了许多方法来得出这样的结论:
df3 =用户:评论:部门:问题类型:朱莉的床单脏了,‘卧室’床‘,萨曼莎’饭到冷‘’餐厅‘食物’瑞秋鸡尾酒美味‘’餐厅‘饮料’
这就是我尝试过的:
TRY1
def find_dept(评论):word = review.split(‘')表示单词: if word.isin(df2’关键字‘):返回df2df2['word'] ==word dept =df’review‘..apply(Find_dept)
TRY2
对于df2‘Department’中的部门: if dept.isin(评审):返回True
TRY3
review_dict = df2.to_dict('series') def r_dict(评审):返回review_dictreview def=df‘review’..apply(R_dict)
不用说,我在挣扎.
很抱歉格式不完全正确,这是一个虚构的例子,我的咖啡因水平正在下降。
发布于 2018-03-30 11:44:49
这是一条路。这样做的目的是将映射字典转换为keyword: (department, issue)
格式。
然后使用生成器表达式查找第一个匹配项,遍历新字典。
最后,通过pd.Series.apply(pd.Series)
将一系列元组划分为2列。
注释词典不被认为是有序的。所以,对于多场比赛,你应该考虑一下哪一场比赛会被选中。如果要按特定顺序进行搜索,请使用有序字典(查找collections.OrderedDict
)。
import pandas as pd
df = pd.DataFrame([['Julie', 'Sheets were dirty'],
['Samantha', 'Meal arrived cold'],
['Rachel', 'Cocktails were delicious']],
columns=['User', 'Review'])
d = {'Keyword': ['Sheets','Cocktails','Meal'],
'Department' : ['Bedrooms','Restaurant','Restaurant'],
'Issue Type': ['Beds','Drinks','Food']}
d2 = {key: (dep, iss) for key, dep, iss in \
zip(d['Keyword'], d['Department'], d['Issue Type'])}
def mapper(x):
return d2.get(next((i for i in d2 if i in x), None))
df[['Department', 'IssueType']] = df['Review'].apply(mapper).apply(pd.Series)
结果:
User Review Department IssueType
0 Julie Sheets were dirty Bedrooms Beds
1 Samantha Meal arrived cold Restaurant Food
2 Rachel Cocktails were delicious Restaurant Drinks
https://stackoverflow.com/questions/49573396
复制相似问题