numpy groupby,并使用python创建新的值列

snvhrwxg  于 2023-03-18  发布在  Python
关注(0)|答案(1)|浏览(121)

我不明白其中的逻辑,我该如何实现它。请参阅下表图像,我想对TRACE列进行分组,如果RESOLVED_QUERY中存在值 no_emp_id,则创建值为 no_emp_id 的新列。演示表1

我尝试迭代该行,但没有得到正确的结果,请查看我得到的结果,我的结果

查看预期结果。预期结果

请帮我解决这个任务。
谢谢

eyh26e7m

eyh26e7m1#

你可以用.unique()函数(在第二步)来查找一个'trace'是否包含任何值(例如'no_emp_id'
示例:

1.将虚拟数据库初始化为示例
>>> 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
2.如果任何跟踪包括'no_emp_id',则设置控制器df以控制跟踪

这个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]
3.创建新列,该列为'command',包含所需值('no_emp_id'

在这一步中,我们只是用我们controller_df快速检查每个'trace',如果'trace'包括我们想要的值,我们就添加到新列

>>> 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'

相关问题