python如何根据字典去把人名分成单独的列

zidian=['刘友德','熊剑','张明泽','朱淑贞','涂敬','黄德明','闫凌博','刘翠芳'],

df = pd.DataFrame({
    '人名': ['(刘友德熊剑)张明泽朱淑贞涂敬黄德明闫凌博刘翠芳',

         '(刘友德)刘友德郑旭祥',

         '(刘友德熊剑)张明泽李扶新林春媚']
}),

python如何根据zidian去把人名分成单独的列

import pandas as pd

zidian = ['刘友德', '熊剑', '张明泽', '朱淑贞', '涂敬', '黄德明', '闫凌博', '刘翠芳']
df = pd.DataFrame({
    '人名': ['(刘友德熊剑)张明泽朱淑贞涂敬黄德明闫凌博刘翠芳', '(刘友德)刘友德郑旭祥', '(刘友德熊剑)张明泽李扶新林春媚']
})

def split_names(name_str, names_list):
    result = []
    start_idx = 0
    for name in names_list:
        idx = name_str.find(name, start_idx)
        if idx != -1:
            if idx > start_idx:
                # 如果找到了名字,并且它前面还有字符,则添加一个占位符(如None)
                result.append(None)
            result.append(name)
            start_idx = idx + len(name)
        else:
            # 如果名字没有在当前位置找到,则添加一个占位符(如None)
            result.append(None)
    
    # 如果字符串的末尾还有剩余字符,则添加为最后一个名字(可能是错误的,需要进一步的逻辑来确定)
    if start_idx < len(name_str):
        result.append(name_str[start_idx:])
    
    return result

# 应用split_names函数到df的'人名'列,并创建新的列
for i, name in enumerate(zidian):
    df[name] = df['人名'].apply(lambda x: split_names(x, zidian)[i] if i < len(split_names(x, zidian)) else None)

# 删除原来的'人名'列
df = df.drop(columns=['人名'])

# 显示结果
print(df)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值