Python 将列表元素的关键字与列匹配
这个问题是问题的另一部分。所以我把它作为一个新问题加上 如果我的数据帧B类似于:Python 将列表元素的关键字与列匹配,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,这个问题是问题的另一部分。所以我把它作为一个新问题加上 如果我的数据帧B类似于: ID category words bucket_id 1 audi a4, a6 94 2 bugatti veyron, chiron 86 3 mercedez s-class, e-cl
ID category words bucket_id
1 audi a4, a6 94
2 bugatti veyron, chiron 86
3 mercedez s-class, e-class 79
4 dslr canon, nikon 69
5 apple iphone,macbook,ipod 51
6 finance sales,loans,sales price 12
7 politics trump, election, votes 77
8 entertainment spiderman,thor, ironmen 88
9 music beiber, rihana,drake 14
........ ..............
......... .........
我希望映射的类别及其对应的列ID作为字典。比如:-
{'id': 2, 'term': 'bugatti', 'bucket_id': 86}
{'id': 3, 'term': 'mercedez', 'bucket_id': 79}
{'id': 6, 'term': 'finance', 'bucket_id': 12}
{'id': 7, 'term': 'politics', 'bucket_id': 77}
{'id': 9, 'term': 'music', 'bucket_id': 14}
编辑
我只想映射列words
中两个逗号之间精确匹配的关键字,而不是在字符串之间或与任何其他单词一起。
编辑:
df = pd.DataFrame({'ID': [1, 2, 3],
'category': ['bugatti', 'entertainment', 'mercedez'],
'words': ['veyron,chiron', 'spiderman,thor,ironmen',
's-class,e-class,s-class'],
'bucket_id': [94, 86, 79]})
print (df)
ID category words bucket_id
0 1 bugatti veyron,chiron 94
1 2 entertainment spiderman,thor,ironmen 86
2 3 mercedez s-class,e-class,s-class 79
A = ['veyron','s-class','derman']
idx = [i for i, x in enumerate(df['words']) for y in x.split(',') if y in A]
print (idx)
[0, 2, 2]
L = (df.loc[idx, ['ID','category','bucket_id']]
.rename(columns={'category':'term'})
.to_dict(orient='r'))
print (L)
[{'ID': 1, 'term': 'bugatti', 'bucket_id': 94},
{'ID': 3, 'term': 'mercedez', 'bucket_id': 79},
{'ID': 3, 'term': 'mercedez', 'bucket_id': 79}]
在这段代码中,
L=(df.loc[[bool(set(A)&set(x.split(','))for x In df['words'],['ID','category','bucket_ID']])。重命名(columns={'category':'term'})。要编辑(orient='r'))
我也可以得到所有的类别,包括重复的类别。对于ex,如果映射了两次mercedez
,则应返回mercedez
twotimes@Mavrick-完全更改答案-为每个匹配的单词创建索引,然后创建dict列表。