匹配字符串和计数频率

2024-05-14 15:27:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一份公司及其子公司的名单,数据如下:

CompanyName            Employees
Microsoft China          1
Microsoft India          1
Microsoft Europe         1
Apple Inc                1
Apple Data Inc           1
Apple Customer Service Inc   1
Data Corp                1
Data SHCH                1
Data India               1
City Corp                1
Data City                 1

如果两个公司有相同的词(例如苹果公司和苹果数据公司),则它们被视为一个公司。我将这些公司归为一组,并计算它们的员工总数

The expected return should be:
Company     Employees
Microsft     3
Apple        3
Data         3
City         2 
  1. 公司将返回常用词
  2. 员工返回公司及其子公司的总额

在这种情况下,熊猫的大部分功能实际上不起作用。关于For Loop有什么建议吗?


Tags: 数据cityappledata员工公司microsoftinc
2条回答
  • 按照你在评论中的要求
    • 如果公司始终是CompanyName中的第一个单词
# extract company as word at index 0
df.CompanyName = df.CompanyName.str.split(expand=True)[0]

# groupby company name and count
dfg = df.groupby('CompanyName').agg({'CompanyName': 'count'})

# display(dfg)
             CompanyName
CompanyName             
Apple                  3
City                   1
Data                   4
Microsoft              3

我不认为有一个“非常”简单的方法来做你想做的事。但也不太复杂

首先,您需要明确定义~标准,以确定哪些名称是相同的“公司”。 我们可以尝试“获得第一世界,看看它是否匹配”,显然这不是一个完美的方法,但现在就可以了

然后,您可以创建一个对象来存储新数据。我推荐一本字典,里面有company: (total employees)这样的词条

现在,您将使用apply和一个函数遍历数据帧的行,以执行您想要的操作。看起来是这样的:

dict = {}

def aggregator(row):
    word1 = row.company.split(" ")[0]
    
    if word1 in dict.keys:
       dict[word1] += row.employees

    else:
        dict[word1] = row.employees

dataframe.apply(aggregator, axis = 1)

相关问题 更多 >

    热门问题