Pandas - 基于 str 包含从另一列创建新列/值

Posted

技术标签:

【中文标题】Pandas - 基于 str 包含从另一列创建新列/值【英文标题】:Pandas - Create new column w/values from another column based on str contains 【发布时间】:2021-09-25 11:24:15 【问题描述】:

我有两个 DataFrame。一个有多个列,另一个只有一个。所以我需要的是基于列的部分 str 加入。示例:

df1

| Name     |       Classification       |
| -------- | -------------------------- |
| A        | Transport/Bicycle/Mountain |
| B        | Transport/City/Bus         |
| C        | Transport/Taxi/City        |
| D        | Transport/City/Uber        |
| E        | Transport/Mountain/Jeep    |

df2



| Category |
| -------- | 
| Mountain |
| City     | 

您可以看到分类列上的顺序没有很好地定义。

可嘲笑输出

| Name     |       Classification       | Category  |
| -------- | -------------------------- |-----------|
| A        | Transport/Bicycle/Mountain | Mountain  |
| B        | Transport/City/Bus         | City      |
| C        | Transport/Taxi/City        | City      |
| D        | Transport/City/Uber        | City      |
| E        | Transport/Mountain/Jeep    | Mountain  |

我坚持这一点。有什么想法吗?

非常感谢。

【问题讨论】:

如果两个字符串都出现在分类下你想要什么? 我理解你的问题@JustinEzequiel,也许我的例子不是很清楚。首先让我告诉你,我处于非常初级的水平,所以这可能非常简单。我需要的是一种同时加入 Df 并应用正确类别的方法。 我的意思是如果分类列有,例如“foo/Mountain/City/bar”呢? 哦,好的。如果两者都出现,则可能是其中任何一个。 【参考方案1】:

这个实现可以解决问题:

def get_cat(val):
    for cat in df2['Category']:
        if cat in val:
            return cat
    return None

df['Category'] = df['Classification'].apply(get_cat)

注意:正如@Justin Ezequiel 在 cmets 中指出的那样,当 Mountain 和 City 存在于分类中时,您尚未指定要做什么。当前实现使用第一个匹配的类别。

【讨论】:

lambda x: f(x) 是一种无趣的写作方式 f 我认为【参考方案2】:

你可以试试这个:

dff="ne":[]

for x in df1["Classification"]:
    if a in df2 and a in x:
        dff["ne"].append(a)
df1["Category"]=dff["ne"]

df1 看起来像您想要的输出。

【讨论】:

@Kshitz 很好的实现。旁注:不匹配的分类项目会在 df1 中产生奇怪的结果。双 if 语句可以写成更短的 if a in df2 and a in x

以上是关于Pandas - 基于 str 包含从另一列创建新列/值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas - 基于另一列(城市名称)创建一个新列(分支名称)

Pandas:创建新列,其中包含按组列出的另一列中最大值的对应值

从另一列的子字符串更新一列

Pandas:根据另一列的百分比增长率创建一个新列

Pandas:如果条件[重复],则从另一列更新列值

如何创建从另一列计算的列?