为了账号安全,请及时绑定邮箱和手机立即绑定

根据现有制作多列

根据现有制作多列

萧十郎 2021-12-08 16:19:29
我目前有一列包含我想要解析的数据,然后将此数据放在其他列上。目前我能得到的最好的方法是使用 apply 方法:def parse_parent_names(row):    split = row.person_with_parent_names.split('|')[2:-1]    return splitdf['parsed'] = train_data.apply(parse_parent_names, axis=1).head()数据是一个panda df,其列的名称由管道(|)分隔:'person_with_parent_names'|John|Doe|Bobba||Fett|Bobba||Abe|Bea|Cosby|作为最右边的人,最左边的人是“最伟大的父母”。我想将其转换为三列,例如:'grandfather'    'father'    'person'John             Doe         Bobba                 Fett        BobbaAbe              Bea         Cosby但是通过申请,我能得到的最好的是'parsed'[John, Doe,Bobba][Fett, Bobba][Abe, Bea, Cosby]我可以使用 apply 3 次,但读取整个数据集 3 次效率不高。
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您的函数应该通过比较数量|和三元运算符拆分来更改,最后传递给DataFrame构造函数:


def parse_parent_names(row):

    m = row.count('|') == 4

    split = row.split('|')[1:-1] if m else row.split('|')[:-1]

    return split


cols = ['grandfather','father','person']

df1 = pd.DataFrame([parse_parent_names(x) for x in df.person_with_parent_names],

                    columns=cols)

print (df1)

  grandfather father person

0        John    Doe  Bobba

1               Fett  Bobba

2         Abe    Bea  Cosby


查看完整回答
反对 回复 2021-12-08
  • 1 回答
  • 0 关注
  • 184 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信