gpt4 book ai didi

python - 分隔行 python pandas

转载 作者:太空宇宙 更新时间:2023-11-03 14:11:53 25 4
gpt4 key购买 nike

我有一个如下所示的表格:

username     email                name         phone1     phone2
1920 abc@gmail.com TSteve/Nancy a b

我希望这是:

username     email            first_name     last_name    phone1     phone2
1920 abc@gmail.com Steve T a
1920-2 Nancy T b

此表为 csv 格式。

总结:

1) 将“name”列拆分为“first_name”和“last_name”,并将本例中的第一个字母“T”移动到“last_name”,并用两个名称“Steve”和“Nancy”分隔该行。 Steve/Nancy 将根据“/”进行拆分,并删除斜杠。

2) 电话 1 保留,但电话 2 将移动到下一行。 (稍后我会将phone1和2合并)

3) 第二行的新用户名将是相同的数字,末尾带有“-2”。

我花了三天时间尝试了几件事,但都失败了。如果你们能指导我完成这些步骤,对我的学习和学习将会非常有帮助。

谢谢

最佳答案

我认为你需要:

#get all columns without name
cols = df.columns.difference(['name']).tolist()
#create MultiIndex and split, reshape by stack
df = (df.set_index(cols)['name']
.str.split('/',expand=True)
.stack()
.reset_index(name='first_name'))
#boolen mask for select only first or last new rows
m = df['level_4'].eq(0)
#remove column level_4
df = df.drop('level_4', axis=1)
#add last name for select first letter by condition, replace NaNs by forward fill
df['last_name'] = df['first_name'].str[0].where(m).ffill()
#get all letter without first
df['first_name'] = df['first_name'].mask(m, df['first_name'].str[1:])
#remove first all last values
df['email'] = df['email'].where(m, '')
df['phone1'] = df['phone1'].where(m, '')
df['phone2'] = df['phone2'].mask(m, '')
#add -2 for second rows
df['username'] = df['username'].where(m, df['username'].astype(str) + '-2')
print (df)
email phone1 phone2 username first_name last_name
0 abc@gmail.com a 1920 Steve T
1 b 1920-2 Nancy T
2 abcd@gmail.com a 1921 Steve K
3 b 1921-2 Nancy K

关于python - 分隔行 python pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48436337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com