Python 是否通过从现有列中提取值来创建新列?
我在下面有一个df_a,在下面的一列中有文本值Python 是否通过从现有列中提取值来创建新列?,python,python-3.x,regex,pandas,Python,Python 3.x,Regex,Pandas,我在下面有一个df_a,在下面的一列中有文本值 ID | Comment 2 @thomas what do you mean? 3 @Rob yes 4 @carol @3423 no way 45 @13121 @Mike yes sir 如何创建一个新列,该列的名称位于注释列中@符号之后?我只想创建列,如果该名称存在于我的另一个名为df_b的df中,列名称如下: df_b: 预期产出: ID | Comm
ID | Comment
2 @thomas what do you mean?
3 @Rob yes
4 @carol @3423 no way
45 @13121 @Mike yes sir
如何创建一个新列,该列的名称位于注释列中@符号之后?我只想创建列,如果该名称存在于我的另一个名为df_b的df中,列名称如下:
df_b:
预期产出:
ID | Comment | name
2 @thomas what do you mean? thomas
3 @Rob yes Rob
4 @carol @3423 no way carol
45 @13121 @Mike yes sir mike
谢谢 使用正则表达式
str.extract(r“@([A-Za-z]+)”)
Ex:
df['name'] = df['Comment'].str.extract(r"@([A-Za-z]+)")
print(df)
Comment name
0 @thomas what do you mean? thomas
1 @Rob yes Rob
2 @carol @3423 no way carol
3 @13121 @Mike yes sir Mike
输出:
df['name'] = df['Comment'].str.extract(r"@([A-Za-z]+)")
print(df)
Comment name
0 @thomas what do you mean? thomas
1 @Rob yes Rob
2 @carol @3423 no way carol
3 @13121 @Mike yes sir Mike
立即提取写为
的@
左侧的字符串(?如果您知道字符串总是以@name
开头,后跟空格,则可以执行s.split(“”)[0]
要从字符串s
中获取第一个空格左侧的所有文本,并切掉第一个字符,如:s.split(“”)[0][1:
如果您不知道,只想在字符串中查找第一个@name,可以使用str.find
函数查找第一个@,以及其后的第一个空格
为了获得一个新的列,我将使用lambda
构建一个简单的函数,然后使用。apply
:
df['name'] = df['comment'].apply(lambda s: s.split(' ')[0][1:])
但是,这并不能满足您的要求,即如果名称不在其他数据帧中,则不需要名称列。我假设您的意思是,在这些情况下,您希望输入一个空字符串,因为您不能真正拥有一个只存在于某些行中的列。您可以直接在上面的lambda函数中执行此操作,但需要一个更可读的e方法是在之后过滤掉它们:
df['name'][~df['name'].isin(df_b[column_name])] = ''
代码片段df['name'].isin(df_b[column_name])
给我们一个二进制列,指示名称在其他数据帧中的行,因此为了使所有其他条目为空,我们使用~
对其求反,以获得名称不在其他数据帧中的所有行,然后切片df['name']
此新列指示我们要从中删除名称的所有行,并将它们设置为等于空字符串'