我知道这可能是一个不好的做法,但我工作的公司将存储组织名称,其中包含**标题中的特殊信息,这让我感到非常头痛。仍在学习python的绳索,并希望得到一些澄清和一些帮助:
首先,介绍我要做的事情。
我有一个记录数据库,我需要将其分配给拥有组织的团队的独立成员。遗憾的是,我们的系统正在重新设计,这份报告被认为是“遗产”,因此我不得不在我们的系统之外执行此操作。
数据传入如下:
Case Reason Referral Partners
Case reason 1 Org 1
Case reason 1 Org 2363
Case reason 8 Org 53
Case reason 4 Org 100
Case reason 3 org 68
Case reason 2 Org 100
我将工作人员与他们分配的组织保存在一个字典中,并将工作人员的字典保存在我们的CRM中,例如
org_owners = {'Worker 1': ['Org 1', 'Org 2']}
user_id = {'Worker 1' : 'ID 1'}
我运行它的代码看起来像这样:
for i in user_id:
list_of_values = hospital_owners[i]
for index, row in df.iterrows():
if row['Referral Partners'] in (list_of_values):
print(user_id[i])
row['User Id'] = user_id[i]
else:
pass
writer = pd.ExcelWriter('testoutput.xlsx')
df.to_excel(writer)
writer.save()
产生我想要的结果:
Case Reason Referral Partners Owner ID
Case Reason 1 Org 1 ID1
Case Reason 1 Org 2363 ID13
超级简单的代码,我确信它不是最快的,我总是愿意接受和学习的任何建议。我的问题是,它正确地指定每个单独的组织期望看起来像:
org1**Partner Handles X Type of Case
任何与**不匹配的东西。我该如何解决这个问题?
谢谢!
答案 0 :(得分:0)
看起来pandas可以替换大部分代码。
import pandas as pd
首先,我们将构建一个近似于您的CRM的数据框。
df = pd.DataFrame({'Case Reason':['Case reason 1','Case reason 1','Case reason 8','Case reason 4'],
'Referral Partners':['Org 1','Org 2363','Org 1**Partners','Org 100']})
Case Reason Referral Partners
0 Case reason 1 Org 1
1 Case reason 1 Org 2363
2 Case reason 8 Org 1**Partners
3 Case reason 4 Org 100
如果CRM中的数据位于平面文件中,您可以使用pandas.read_csv()将其加载到数据框中。完成后,您可以利用pandas的速度对之前使用for循环完成的结果数据帧执行操作。
接下来,我看到你有两本词典;一个将Orgs链接到Workers,另一个链接Worker和Worker ID。如果可能,通过构建一个将Orgs作为键,将Worker ID作为项的字典来简化此操作可能会有所帮助,如下所示。
org_owners = {'Org 1':'ID 1','Org 2':'ID 1'}
这使得使用pandas map函数将此字典中的键重新编码为相应的项目变得更容易一些。但是,如果您仍然需要工作人员编号(例如,“工作人员1”),您可以使用以下过程从组织编号重新编码为工作人员编号,然后从工作人员编号重新编码为工作人员编号,而不是上面重新配置的字典。肯定有更好的方法来完成这件作品,但这就是我想到的一切。
下面的行会创建一个包含所有者ID的新列。使用pandas extract string method,我们可以使用正则表达式查找引荐合作伙伴列中以“Org”开头,后跟单个空格(\ W)和至少一个数字(\ d {1,})的任何字符串。这将允许我们忽略出现在单元格中的双星号和其他文本。接下来,map function执行重新编码操作,生成与Worker名称对应的Worker ID。
df['Owner ID'] = df['Referral Partners'].str.extract('(Org\W\d{1,})',expand=False).map(org_owners)
这将导致下面的数据帧。
Case Reason Referral Partners Owner ID
0 Case reason 1 Org 1 ID 1
1 Case reason 1 Org 2363 NaN
2 Case reason 8 Org 1**Partners ID 1
3 Case reason 4 Org 100 NaN
现在,您只需提供to_excel的路径即可将数据框保存为Excel文件。
df.to_excel('/path/to/excel_file.xlsx')