Pandas 拆分列 (dtype:list) 后跟动态 lookup/merge
Pandas splitting of columns (dtype:list) followed by dynamic lookup/merge
我有一个数据框如下。
Table_name
Domain
Use_case
group
Reporting
finance, marketing
resource
Banking, Reporting
marketing, sales, finance
customer
Reporting
sales
Domain_df[]:
Domain_name
Domain_id
Reporting
1001
Banking
1002
Usecase_df[]
usecase_name
id
Finance
2001
marketing
2002
sales
2003
我想要的最终结果是:
Table_name
Domain
Use_case
domain_id
usecase_id
group
Reporting
finance, marketing
[1001]
[2001,2002]
resource
Banking,Reporting
marketing, sales, finance
[1002,1001]
[2002,2003,2001]
customer
Reporting
sales
[1002]
[2003]
最初我尝试使用定界符拆分列,并使用
形成单独的列
df=df.join(pandas.DataFrame(df['Verified Use case'].str.split(', ', expand=True)).add_prefix('use_case_'))
我得到的结果是这样的:
Table_name
Domain
Use_case
domain0
domain1
usecase0
usecase1
usecase2
group
Reporting
finance, marketing
Reporting
NA
finance
marketing
NA
resource
Banking, Reporting
marketing, sales, finance
Banking
Reporting
marketing
sales
finance
customer
Reporting
sales
reporting
NA
sales
NA
NA
除此之外,我需要对域和用例表的所有列执行 merge/lookup 以获取以列中列表的形式返回到数据框的相应 ID。应该是对应ids的列表。
将每一列拆分为单独的动态列然后进行合并是否是一种好方法(在这种情况下编写此合并语句很棘手,我需要一些帮助)
但我的问题是有没有其他方法可以直接实现此目的而不拆分它?
如果没有,那如何实现动态合并呢?
PS: 在列域中输入的值的数量 use_case 是一个变量。
如果 question/result 不清楚,请告诉我。
非常感谢
这是一个可能的解决方案:
domain_map = domain_df.set_index('Domain_name')['Domain_id'].to_dict()
usecase_map = usecase_df.set_index('usecase_name')['id'].to_dict()
df = df.assign(
domain_id=(
df['Domain'].str.split(', ')
.map(lambda lst: list(map(domain_map.get, lst)))),
usecase_id=(
df['Use_case'].str.split(', ')
.map(lambda lst: list(map(usecase_map.get, lst)))),
)
我有一个数据框如下。
Table_name | Domain | Use_case |
---|---|---|
group | Reporting | finance, marketing |
resource | Banking, Reporting | marketing, sales, finance |
customer | Reporting | sales |
Domain_df[]:
Domain_name | Domain_id |
---|---|
Reporting | 1001 |
Banking | 1002 |
Usecase_df[]
usecase_name | id |
---|---|
Finance | 2001 |
marketing | 2002 |
sales | 2003 |
我想要的最终结果是:
Table_name | Domain | Use_case | domain_id | usecase_id |
---|---|---|---|---|
group | Reporting | finance, marketing | [1001] | [2001,2002] |
resource | Banking,Reporting | marketing, sales, finance | [1002,1001] | [2002,2003,2001] |
customer | Reporting | sales | [1002] | [2003] |
最初我尝试使用定界符拆分列,并使用
形成单独的列df=df.join(pandas.DataFrame(df['Verified Use case'].str.split(', ', expand=True)).add_prefix('use_case_'))
我得到的结果是这样的:
Table_name | Domain | Use_case | domain0 | domain1 | usecase0 | usecase1 | usecase2 |
---|---|---|---|---|---|---|---|
group | Reporting | finance, marketing | Reporting | NA | finance | marketing | NA |
resource | Banking, Reporting | marketing, sales, finance | Banking | Reporting | marketing | sales | finance |
customer | Reporting | sales | reporting | NA | sales | NA | NA |
除此之外,我需要对域和用例表的所有列执行 merge/lookup 以获取以列中列表的形式返回到数据框的相应 ID。应该是对应ids的列表。
将每一列拆分为单独的动态列然后进行合并是否是一种好方法(在这种情况下编写此合并语句很棘手,我需要一些帮助)
但我的问题是有没有其他方法可以直接实现此目的而不拆分它?
如果没有,那如何实现动态合并呢?
PS: 在列域中输入的值的数量 use_case 是一个变量。
如果 question/result 不清楚,请告诉我。
非常感谢
这是一个可能的解决方案:
domain_map = domain_df.set_index('Domain_name')['Domain_id'].to_dict()
usecase_map = usecase_df.set_index('usecase_name')['id'].to_dict()
df = df.assign(
domain_id=(
df['Domain'].str.split(', ')
.map(lambda lst: list(map(domain_map.get, lst)))),
usecase_id=(
df['Use_case'].str.split(', ')
.map(lambda lst: list(map(usecase_map.get, lst)))),
)