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 - 基于另一列(城市名称)创建一个新列(分支名称)