Pandas - 根据 str 包含从另一列创建带有值的新列

时间:2021-07-16 16:52:35

标签: python pandas string join merge

我有两个数据帧。一列有多列,另一列只有一列。所以我需要的是基于列的部分 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     | 

如您所见,Classification 列上的顺序没有很好地定义。

可鄙的输出

| 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  |

我被困在这个问题上。有什么想法吗?

非常感谢。

2 个答案:

答案 0 :(得分:2)

这个实现可以解决问题:

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 在评论中指出的那样,当分类中存在 Mountain 和 City 时,您没有指定要做什么。当前实现使用第一个匹配的 Category。

答案 1 :(得分:1)

你可以试试这个:

dff={"ne":[]}

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

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