如何从Colum B的字符串中删除Colum A的字符串

时间:2019-08-12 21:44:51

标签: python pandas substring concatenation

如果您有两列(A ='Name',B ='Name_Age'),那么是否有一种快速方法可以从'Name_Age'中删除'Name',因此您可以快速获得'Age',就像反向级联??

我曾经考虑过“字符串拆分”,但是在某些情况下(当没有字符串拆分因子时),我确实需要一种从另一列中删除一列字符串的方法。

@property

3 个答案:

答案 0 :(得分:1)

您可以尝试使用pandas apply函数,该函数可让您定义要传递给数据帧每一行的函数:

def age_from_name_age(name, name_age):
    return name_age.replace(name, '').strip()

df['Age'] = df.apply(lambda x: age_from_name_age(x['Name'], x['Name_Age']),
                     axis='columns')

age_from_name_age接受两个字符串(一个名称和一个name_age),并仅返回年龄。然后,在apply语句中,我定义了一个匿名lambda函数,该函数只接受一行并将正确的字段传递给age_from_name_age

答案 1 :(得分:1)

使用字符串切片:

df['Age'] = df.apply(lambda row: row['Name_Age'][len(row['Name']):], axis=1).astype(int)

答案 2 :(得分:0)

您可以使用str.split()使用空格分隔符将值与列名分开,然后使用新名称重命名该列。

1)使用str.split()

>>> df['Name_Age'].str.split(" ", expand=True).rename(columns={0:'Name', 1:'Age'})
      Name Age
0     Mark  14
1     Matt  29
2  Michael  18

OR

>>> df = df['Name_Age'].str.split(" ", expand=True).rename(columns={0:'Name', 1:'Age'})
>>> df
      Name Age
0     Mark  14
1     Matt  29
2  Michael  18

或,通过将拆分后的列表转换为新的数据帧:

>>> pd.DataFrame(df.Name_Age.str.split().tolist(), columns="Name Age".split())
      Name Age
0     Mark  14
1     Matt  29
2  Michael  18

2)使用str.partition

的另一种选择
>>> df['Name_Age'].str.partition(" ", True).rename(columns={0:'Name', 2:'Age'}).drop(1, axis=1)
      Name Age
0     Mark  14
1     Matt  29
2  Michael  18

3)另一个将df.assignlambda一起使用

按如下所示将split()与默认分隔符一起使用,并用新列Age赋值。

>>> df.assign(Age = df.Name_Age.apply(lambda x: x.split()[1]))
      Name    Name_Age Age
0     Mark     Mark 14  14
1     Matt     Matt 29  29
2  Michael  Michael 18  18

OR

>>> df.Name_Age.apply(lambda x: pd.Series(str(x).split())).rename({0:"Name",1:"Age"}, axis=1)
      Name Age
0     Mark  14
1     Matt  29
2  Michael  18