【发布时间】:2022-12-28 13:51:39
【问题描述】:
我有 2 个熊猫数据框:
df1 = pd.DataFrame({'keyword': ['Sox','Sox','Jays','D', 'Jays'],
'val':[1,2,3,4,5]})
df2 = pd.DataFrame({'name': ['a b c', 'Sox Red', 'Blue Jays White Sox'],
'city':[f'city-{i}' for i in [1,2,3]],
'info': [5, 6, 7]})
>>> df1
keyword val
0 Sox 1
1 Sox 2
2 Jays 3
3 D 4
4 Jays 5
>>> df2
name city info
0 a b c city-1 5
1 Sox Red city-2 6
2 Blue Jays White Sox city-3 7
对于 df1 的每一行,合并应该采用 df1['keyword'] 的确切元素,并查看它是否存在于每个 df2['name'] 元素中(例如使用 .str.contains)。现在有以下选项:
- 如果它恰好出现在
df2['name']的一行中:将df1的当前行与df2的这一行相匹配。 - 否则(如果它出现在
df2['name']的不止一行或零行中):不要将df1的当前行与任何内容匹配 - 值将为NaN。
结果应如下所示:
keyword val name city info
0 Sox 1 NaN NaN NaN
1 Sox 2 NaN NaN NaN
2 Jays 3 Blue Jays city-3 7.0
3 D 4 NaN NaN NaN
4 Jays 5 Blue Jays city-3 7.0
在"team_keyword"专栏中:
-
"Sox"匹配df2的多行(第 1 行和第 2 行),因此它与NaNs 合并, -
"D"匹配0行,所以也和NaNs合并, -
"Jays"恰好匹配df2中的 1 行,因此它与这一行合并。
如何使用熊猫做到这一点?
【问题讨论】:
标签: python pandas regex dataframe merge