【问题标题】:Pandas - Create new column w/values from another column based on str containsPandas - 基于 str 包含从另一列创建新列/值
【发布时间】: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”呢?
  • 哦,好的。如果两者都出现,则可能是其中任何一个。

标签: python pandas string join merge


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-07
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多