我不明白其中的逻辑,我该如何实现它。请参阅下表图像,我想对TRACE列进行分组,如果RESOLVED_QUERY中存在值 no_emp_id,则创建值为 no_emp_id 的新列。演示表1
我尝试迭代该行,但没有得到正确的结果,请查看我得到的结果,我的结果
查看预期结果。预期结果
请帮我解决这个任务。谢谢
eyh26e7m1#
你可以用.unique()函数(在第二步)来查找一个'trace'是否包含任何值(例如'no_emp_id')示例:
.unique()
'trace'
'no_emp_id'
>>> import pandas as pd >>> df = pd.DataFrame({ 'trace':['1a223b','2b223b','3a33c','2b223b','1a223b','3a33c','3a33c'], 'resolved_query':['no_emp_id','TELE_WEL','TELE_WEL','good','TELE_WEL','no_emp_id','no_emp_id'] }) >>> df trace resolved_query 0 1a223b no_emp_id 1 2b223b TELE_WEL 2 3a33c TELE_WEL 3 2b223b good 4 1a223b TELE_WEL 5 3a33c no_emp_id 6 3a33c no_emp_id
这个df帮助我们找到哪个'trace'包含什么
>>> controller_df = df.groupby('trace')['resolved_query'].unique().reset_index().copy() >>> controller_df trace resolved_query 0 1a223b [no_emp_id, TELE_WEL] 1 2b223b [TELE_WEL, good] 2 3a33c [TELE_WEL, no_emp_id]
'command'
在这一步中,我们只是用我们controller_df快速检查每个'trace',如果'trace'包括我们想要的值,我们就添加到新列
controller_df
>>> desired_value = 'no_emp_id' >>> df['command'] = df['trace'].apply(lambda x: desired_value if (desired_value in controller_df[controller_df['trace']==x]['resolved_query'].iloc[0]) else None) >>> df.sort_values('trace') trace resolved_query command 0 1a223b no_emp_id no_emp_id 4 1a223b TELE_WEL no_emp_id 1 2b223b TELE_WEL None 3 2b223b good None 2 3a33c TELE_WEL no_emp_id 5 3a33c no_emp_id no_emp_id 6 3a33c no_emp_id no_emp_id
如我们所见,'2b223b'与'resolved_query'中的任何'no_emp_id'都不匹配,因此我们没有将其添加到'command'列
'2b223b'
'resolved_query'
1条答案
按热度按时间eyh26e7m1#
你可以用
.unique()
函数(在第二步)来查找一个'trace'
是否包含任何值(例如'no_emp_id'
)示例:
1.将虚拟数据库初始化为示例
2.如果任何跟踪包括
'no_emp_id'
,则设置控制器df以控制跟踪这个df帮助我们找到哪个
'trace'
包含什么3.创建新列,该列为
'command'
,包含所需值('no_emp_id'
)在这一步中,我们只是用我们
controller_df
快速检查每个'trace'
,如果'trace'
包括我们想要的值,我们就添加到新列如我们所见,
'2b223b'
与'resolved_query'
中的任何'no_emp_id'
都不匹配,因此我们没有将其添加到'command'
列