根据另一个列值删除字符串中的单词
Remove word within a string based on another columns value
我有两列,它们是逗号分隔的单词和字符串格式的单个单词的组合。 col1
永远只包含一个词。在此示例中,我将使用单词 Dog 作为 col1
中的单词,但这在实际数据中会有所不同,因此请不要使用正则表达式进行解决特别是 Dog。
df = pd.DataFrame({"col1": ["Dog", "Dog", "Dog", "Dog"],
"col2": ["Cat, Mouse", "Dog", "Cat", "Dog, Mouse"]})
我想检查 col1
中的单词是否出现在 col2
的字符串中,如果出现,我想从 col2
中删除该单词。但请记住,如果还有更多单词,我想保留字符串的其余部分。所以它将从这里开始:
col1 col2
0 Dog Cat, Mouse
1 Dog Dog
2 Dog Cat
3 Dog Dog, Mouse
为此:
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
试试这个:
import re
df['col2'] = [(re.sub(fr"({word}[\s,]*)","",sentence))
for word,sentence in zip(df.col1,df.col2)]
df
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
另一个df,中间有狗:
df = pd.DataFrame({"col1": ["Dog", "Dog", "Dog", "Dog","Dog"],
"col2": ["Cat, Mouse", "Dog", "Cat", "Dog, Mouse", "Cat, Dog, Mouse"]})
df
col1 col2
0 Dog Cat, Mouse
1 Dog Dog
2 Dog Cat
3 Dog Dog, Mouse
4 Dog Cat, Dog, Mouse
应用上面的代码:
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
4 Dog Cat, Mouse
(^,|,$)
处理起始和尾随逗号
(,\s|,)
将删除替换操作后保留的逗号。
{1,}
跳过不重复的逗号
df['col2'] = df['col2'].str. \
replace("|".join(df['col1'].unique()), "").str.strip() \
.str.replace("(?:^,|,$)", "") \
.str.replace("(?:,\s|,){1,}", ",")
col1 col2
0 Dog Cat,Mouse
1 Dog
2 Dog Cat
3 Dog Mouse,Mouse
l=df.col1.tolist()
#col1 列表
从 col2
创建集合,通过应用 lambda 函数查找差异来评估 l
在集合中的成员资格。
df['col2']=list(zip(df.col2))
df['col2']=df.col2.apply(lambda x:[*{*x}-{*l}]).str[0]
我有两列,它们是逗号分隔的单词和字符串格式的单个单词的组合。 col1
永远只包含一个词。在此示例中,我将使用单词 Dog 作为 col1
中的单词,但这在实际数据中会有所不同,因此请不要使用正则表达式进行解决特别是 Dog。
df = pd.DataFrame({"col1": ["Dog", "Dog", "Dog", "Dog"],
"col2": ["Cat, Mouse", "Dog", "Cat", "Dog, Mouse"]})
我想检查 col1
中的单词是否出现在 col2
的字符串中,如果出现,我想从 col2
中删除该单词。但请记住,如果还有更多单词,我想保留字符串的其余部分。所以它将从这里开始:
col1 col2
0 Dog Cat, Mouse
1 Dog Dog
2 Dog Cat
3 Dog Dog, Mouse
为此:
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
试试这个:
import re
df['col2'] = [(re.sub(fr"({word}[\s,]*)","",sentence))
for word,sentence in zip(df.col1,df.col2)]
df
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
另一个df,中间有狗:
df = pd.DataFrame({"col1": ["Dog", "Dog", "Dog", "Dog","Dog"],
"col2": ["Cat, Mouse", "Dog", "Cat", "Dog, Mouse", "Cat, Dog, Mouse"]})
df
col1 col2
0 Dog Cat, Mouse
1 Dog Dog
2 Dog Cat
3 Dog Dog, Mouse
4 Dog Cat, Dog, Mouse
应用上面的代码:
col1 col2
0 Dog Cat, Mouse
1 Dog
2 Dog Cat
3 Dog Mouse
4 Dog Cat, Mouse
(^,|,$)
处理起始和尾随逗号
(,\s|,)
将删除替换操作后保留的逗号。
{1,}
跳过不重复的逗号
df['col2'] = df['col2'].str. \
replace("|".join(df['col1'].unique()), "").str.strip() \
.str.replace("(?:^,|,$)", "") \
.str.replace("(?:,\s|,){1,}", ",")
col1 col2
0 Dog Cat,Mouse
1 Dog
2 Dog Cat
3 Dog Mouse,Mouse
l=df.col1.tolist()
#col1 列表
从 col2
创建集合,通过应用 lambda 函数查找差异来评估 l
在集合中的成员资格。
df['col2']=list(zip(df.col2))
df['col2']=df.col2.apply(lambda x:[*{*x}-{*l}]).str[0]