我想找到在key1上合并2个数据帧的最佳方法。结构端部(关键2),例子有时比文字更好:
i want to merge df1 and df2 on product.str.endswith(color)
df1:
index product
1 a208-BLACK
2 a2008-WHITE
3 x307-PEARL-WHITE
4 aa-b307-WHITE
df2:
index color code
1 BLACK X1001
2 WHITE X7005
3 PEARL-WHITE X7055
获得:
^{pr2}$有什么想法吗?在
您可以使用vectorized string method,^{} ,以及regex模式
r'-([A-Z-]+)$'
来查找颜色。在然后
^{pr2}$pd.merge(df1, df2)
将在公共列上合并,在本例中是color
列:例如
收益率
regex模式
r'-([A-Z-]+)$'
表示一些简洁的解决方案:
我不是正则表达式专家,最后一个是最难处理的,但以下工作:
基本上,我将产品代码分割在
-
上,并将所有元素放在第一个破折号的右侧。在剩下的是:
^{pr2}$然后我把破折号放回去,用正则表达式只查找大写字母字符,这处理最后一个,重新连接。在
最后一位是在对color列设置索引后,在另一个df上调用map,这将对df中的颜色值执行查找并返回相应的代码。在
regex不是万无一失的,但它适用于您的数据集。在
编辑
我现在意识到我们不需要那么多人加入:
计时
str方法比使用lambda快2倍以上,这可能并不奇怪,因为
str
方法是向量化的,就像调用map
。在更新时间
所以@unutbu的答案比beaveau上校的答案稍快一些,但在这里使用地图仍然更快。在
事实上,如果我们将@unutbu的regex
str
方法与map结合起来,我们会比我原来的方法更快:所以在这里使用
map
比合并快2倍相关问题 更多 >
编程相关推荐