我有以下列的数据框架:[company_name, company_sector, company_country]
有10个独特的行业:商业服务、金融服务、技术等。它看起来是这样的:输入图片描述
另一方面,我有一个关键字列表= ['services', 'holdings', 'group', ' manufacturing ']等
我正在寻找一种方法来检查每个关键字在company_name中发生的次数,并将其分配给company_sector:输入图片描述
的意义:如有"大西洋航运控股有限公司";并且它属于行业Industrials -然后Industrials将有一个计数1的关键字持有(我已经改变了所有的小写-关键字和公司名称)
如果有公司"Atlantic Navigation Holdings (S) Limited"并且它属于行业Industrials -然后Industrials将有一个计数1的关键字持有(我已经改变了所有的小写-关键字和公司名称)
-
首先创建一个新的数据框架骨架并填充0:
counts_df = pd。DataFrame(列=关键字,指数= df [' comapny_sector '] .unique ())Counts_df = Counts_df .fillna(0)
-
通过数据帧检查关键字是否在company_name中,如果存在-添加到df:
for _, row in train_df.iterrows():对于关键词中的关键词:如果关键字在行['company_name']:counts_df。Loc [row['company_sector'],关键字]+= 1
counts_df
可以使用groupby from pandas[1]来选择每个扇区。可以根据每个扇区计算关键字在for循环中的出现次数。
我使用默认字典[2]来创建这个新的数据框架。
[1] https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.groupby.html[2] https://docs.python.org/3/library/collections.html collections.defaultdict
import pandas as pd
from collections import defaultdict
# dictionary with fake data
d = {'sector': ['one', 'one', 'two', 'two' , 'one'], 'name': ['a', 'b', 'b', 'a', 'b']}
# convert dictionary to pandas DataFrame
df = pd.DataFrame(d)
sector name
0 one a
1 one b
2 two b
3 two a
4 one b
keywords = ['a', 'b', 'c']
# create empty dictionary
new_d = defaultdict(list)
for key, group in df.groupby('sector'):
for k in keywords:
new_d[key].append(sum(group['name'].str.contains(k)))
pd.DataFrame(new_d, index=keywords)
one two
a 1 1
b 2 1
c 0 0
在这种情况下,关键字作为新数据框中的索引,列作为扇区。