通过在pandas/python中重命名数据帧,根据条件分离数据帧的行

2024-09-30 03:24:44 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的id列中的每一行,我希望检查列job中的每一行,并在出现特定作业时重命名下面的id行。你知道吗

在下面的示例中,如果作业seller出现或barber,则必须重命名下面的行。你知道吗

你有线索吗?你知道吗

entry = pd.DataFrame([['1','35','fireman'],['2','35','policeman'],['3','35','seller'],['4','35','seller'],['5','35','accountant'],['6','35','barber'],['7','35','fireman']],columns=['index','id','job'])

output = pd.DataFrame([['1','35','fireman'],['2','35','policeman'],['3','35','seller'],['4','35','seller'],['5','35(1)','accountant'],['6','35(1)','barber'],['7','35(2)','fireman']],columns=['index','id','job'])

Tags: columnsid示例dataframeindex作业job重命名
1条回答
网友
1楼 · 发布于 2024-09-30 03:24:44

好吧,这是新的答案。你知道吗

class id_numbering:
    def __init__(self):
        self.number = 0 

    def add_one(self):
        self.number += 1
        return self.number 

    def add_zero(self):
        return self.number 

def new_id(x, number, job_to_match):
    job = x['job']
    id_ = x['id'] 
    is_match_job = x['match_job']

    def id_string(id_, number):
        if number == 0:
            return id_
        else:
            return "{id_}({number})".format(id_=id_, number=number) 

    if (is_match_job is True) and (job not in job_to_match):
        number = number.add_one()
        return id_string(id_, number)
    else:
        number = number.add_zero()
        return id_string(id_, number)

job_to_match = ["seller", "barber"]
entry['match_job'] = entry['job'].map(lambda x: True if x in job_to_match else False)
entry['match_job'] = entry['match_job'].shift(1)

number = id_numbering()
entry["new_id"] = entry.apply(lambda x: new_id(x, number, job_to_match), axis=1)

output = entry.drop("match_job", axis=1)

enter image description here

相关问题 更多 >

    热门问题