Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列表元素的关键字与列匹配_Python_Python 3.x_Pandas_Dataframe - Fatal编程技术网

Python 将列表元素的关键字与列匹配

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

这个问题是问题的另一部分。所以我把它作为一个新问题加上

如果我的数据帧B类似于:

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列表。