Python 基于唯一id的文本列分组依据
我有下面的csv文件Python 基于唯一id的文本列分组依据,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有下面的csv文件 itemid testresult duplicateid 100 textboxerror 0 101 text_input_issue 100 102 menuitemerror 0 103 text_click_issue 100 104 text_caps_error 100 105 menu_drop_down_erro
itemid testresult duplicateid
100 textboxerror 0
101 text_input_issue 100
102 menuitemerror 0
103 text_click_issue 100
104 text_caps_error 100
105 menu_drop_down_error 102
106 text_lower_error 100
107 menu_item_null 102
我想基于duplicateid将上表testreslts转换为两列,结果列为similartestresults,示例表需要如下所示
所需数据帧:
index testresult similartestresults duplicateid
1 textboxerror text_click_issue 100
2 textboxerror text_caps_error 100
3 textboxerror text_caps_error 100
4 textboxerror text_lower_error 100
5 menuitemerror menu_drop_down_error 102
6 menuitemerror menu_item_null 102
我尝试使用pandas groupby,但它只给出一个列表,代码如下
df1 = df.groupby(["duplicateid", "testresult"])
print (df1)
print (df1.groups)
df['similartestresults'] = df.groupby("duplicateid")['testresult'].apply(lambda tags: ','.join(tags))
print (df2)
但上述两种方法均未给出预期结果。请对此提出建议。
谢谢
TSJ复制测试结果列,并使用前四个字符作为组名对其进行更新。将其替换为最终的组名。然后删除不必要的列并重新排序。这符合你问题的意图吗
df['simlartestresult'] = df['testresult'].copy()
# Update to group_name
df['testresult'] = df['simlartestresult'].apply(lambda x: x[:4])
df['testresult'].replace(['text','menu'],['textboxerror','menuitemerror'],inplace=True)
# delete 'dupulicateid = 0'
df = df[~(df['duplicateid'] == 0)]
df = df.sort_values('duplicateid', ascending=True)
df
itemid testresult duplicateid simlartestresult
1 101 textboxerror 100 text_input_issue
3 103 textboxerror 100 text_click_issue
4 104 textboxerror 100 text_caps_error
6 106 textboxerror 100 text_lower_error
5 105 menuitemerror 102 menu_drop_down_error
7 107 menuitemerror 102 menu_item_null
复制测试结果列,并使用前四个字符作为组名对其进行更新。将其替换为最终的组名。然后删除不必要的列并重新排序。这符合你问题的意图吗
df['simlartestresult'] = df['testresult'].copy()
# Update to group_name
df['testresult'] = df['simlartestresult'].apply(lambda x: x[:4])
df['testresult'].replace(['text','menu'],['textboxerror','menuitemerror'],inplace=True)
# delete 'dupulicateid = 0'
df = df[~(df['duplicateid'] == 0)]
df = df.sort_values('duplicateid', ascending=True)
df
itemid testresult duplicateid simlartestresult
1 101 textboxerror 100 text_input_issue
3 103 textboxerror 100 text_click_issue
4 104 textboxerror 100 text_caps_error
6 106 textboxerror 100 text_lower_error
5 105 menuitemerror 102 menu_drop_down_error
7 107 menuitemerror 102 menu_item_null
谢谢你的回答。我需要基于duplicateid创建类似的测试结果。这里,duplicateid 100表示itemid 101的testresult字符串类似于itemid 100(textboxerror)。因此,itemid101103104和106类似于itemid100文本(textboxerror)。因此,在“testresult”列中,我希望保留基本文本100和102字符串,同时在“similartestresults”列中,我希望保留类似的文本字符串。此外,我希望在数据帧中保留duplicateid 0行。因此,这里需要通过duplicateid和itemid列进行主要比较。谢谢。“itemid”的角色不清楚,所以我把它放在原处了。我很高兴你觉得它有用。如果您对此答案感到满意,请接受。感谢您的回答。我需要基于duplicateid创建类似的测试结果。这里,duplicateid 100表示itemid 101的testresult字符串类似于itemid 100(textboxerror)。因此,itemid101103104和106类似于itemid100文本(textboxerror)。因此,在“testresult”列中,我希望保留基本文本100和102字符串,同时在“similartestresults”列中,我希望保留类似的文本字符串。此外,我希望在数据帧中保留duplicateid 0行。因此,这里需要通过duplicateid和itemid列进行主要比较。谢谢。“itemid”的角色不清楚,所以我把它放在原处了。我很高兴你觉得它有用。如果你对这个答案感到满意,请接受它。