gpt4 book ai didi

python - 如何从一列中删除另一列中包含的单词?

转载 作者:行者123 更新时间:2023-12-02 19:26:08 25 4
gpt4 key购买 nike

  Audience              Ad
Audience1 Audience4.Ad1.image
Audience2 Audience1.Ad4.image
Audience3 Audience7.Ad1.image
Audience4 Audience2.Ad3.image
Audience5 Audience9.Ad1.image
Audience6 Audience4.Ad2.image
Audience7 Audience5.Ad1.image
Audience8 Audience7.Ad3.image
Audience9 Audience8.Ad1.image
Audience10 Audience9.Ad1.image

这是一些示例数据。我想做的是查看广告列,如果它包含受众列中的任何内容,请将其替换为任何内容。这里对我来说最困难的部分是,左边可能会说 Audience1,右边可能会说 Audience2,所以它们不一样。如果他们是我知道如何实现这一点,但不幸的是,他们不知道!

所以预期的结果将如下所示

  Audience      Ad
Audience1 Ad1.image
Audience2 Ad4.image
Audience3 Ad1.image
Audience4 Ad3.image
Audience5 Ad1.image
Audience6 Ad2.image
Audience7 Ad1.image
Audience8 Ad3.image
Audience9 Ad1.image
Audience10 Ad1.image

我想到的方法是使用 for 循环遍历 Audience 列,然后如果我发现 Ad 列中包含 Audience 列的任何元素,请将其删除。

这就是我尝试解决它的方法,但我坚持在 return 语句中放置什么(如果其余逻辑当然是正确的):

def replace(text):
for i in df['Audience']:
if i in text:
return ???
df['Ad'] = df['Ad'].apply(replace)

如有任何帮助,我们将不胜感激!

最佳答案

  • 受众转换为set以确保没有重复的值。
  • str.split 广告
  • 使用列表推导式从 Ad 中删除 aud 列表中的术语,然后 str.join条款。

    • [y for y in x if y not in aud]list comprehension
      • 每一行都使用 .split 转换为列表。这会迭代每个值并检查它是否在 aud 列表中。如果是,那么它不会包含在新列表中。
      • '.'.join() 根据列表元素创建字符串
  • 给定 10e6 行的示例数据集 (df = pd.concat([pd.DataFrame(data)]*1000000)):

    • 此答案:Wall time:16.9 s
    • answer来自Shubham Sharma :挂壁时间:27.7 秒
    • answer来自Ch3steR :挂壁时间:15.7 秒
      • 此时间因 df[Audience] 中唯一单词的数量而异,因为这些单词被连接成一个字符串。
import pandas as pd

# data and dataframe
data = {'Audience': ['Audience1', 'Audience2', 'Audience3', 'Audience4', 'Audience5', 'Audience6', 'Audience7', 'Audience8', 'Audience9', 'Audience10'],
'Ad': ['Audience4.Ad1.image', 'Audience1.Ad4.image', 'Audience7.Ad1.image', 'Audience2.Ad3.image', 'Audience9.Ad1.image', 'Audience4.Ad2.image', 'Audience5.Ad1.image', 'Audience7.Ad3.image', 'Audience8.Ad1.image', 'Audience9.Ad1.image']}

df = pd.DataFrame(data)

# create list of unique words from Audience
aud = set(df.Audience.str.lower())

# remove Audience words from Ad column
df.Ad = df.Ad.str.split('.').apply(lambda x: '.'.join([y for y in x if y.lower() not in aud]))

| | Audience | Ad |
|---:|:-----------|:----------|
| 0 | Audience1 | Ad1.image |
| 1 | Audience2 | Ad4.image |
| 2 | Audience3 | Ad1.image |
| 3 | Audience4 | Ad3.image |
| 4 | Audience5 | Ad1.image |
| 5 | Audience6 | Ad2.image |
| 6 | Audience7 | Ad1.image |
| 7 | Audience8 | Ad3.image |
| 8 | Audience9 | Ad1.image |
| 9 | Audience10 | Ad1.image |

选项 2:

  • 根据评论更新了新数据
data = {'Audience': ['Football.And.Basketball.Interests', 'Baseball.Interests', 'Cricket.Interests', 'Website.Visitors'],
'Ad': ['Baseball.Interests.Ad1.image', 'Football.And.Basketball.Interests.Ad4.image', 'Cricket.Interests.Ad1.image', 'Website.Visitors.Ad3.image']}

df = pd.DataFrame(data)

Audience Ad
Football.And.Basketball.Interests Baseball.Interests.Ad1.image
Baseball.Interests Football.And.Basketball.Interests.Ad4.image
Cricket.Interests Cricket.Interests.Ad1.image
Website.Visitors Website.Visitors.Ad3.image

# if Audience contains multiple values
aud = set(df.Audience.str.split('.').explode().str.lower())

# remove Audience words from Ad column
df.Ad = df.Ad.str.split('.').apply(lambda x: '.'.join([y for y in x if y.lower() not in aud]))

Audience Ad
Football.And.Basketball.Interests Ad1.image
Baseball.Interests Ad4.image
Cricket.Interests Ad1.image
Website.Visitors Ad3.image

关于python - 如何从一列中删除另一列中包含的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62376379/

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