import pandas as pd
df1 = pd.DataFrame({'col_name':['12','13','14','15','16','17','18','19','20','21','22','23']})
df2 = pd.DataFrame({'col_name_aggr':['12|13|14', '10|21', '12|15|23'],
'color':['Blue', 'Red', 'Green']})
如何合并这两个 Dataframe ,使结果数据集包含来自df1的所有元素和一个额外的颜色列,当col_name为12、13或14时,该列的值为“蓝色”,当col_name为10或21时,该列的值为“红色”,当col_name为12、15或23时,该列的值为“绿色”,否则,该列的值为“无”?
据我所知,当我尝试使用merge()函数连接 Dataframe 时,我只能指定要合并它们的列。
pd.merge(df1, df2, left_on='col_name', right_on='col_name_aggr', how="left")
有没有办法指定合并它们的条件?
在SQL中,我会这样做:
SELECT
df1.*,
df2.color
FROM df1
left join df2 on CHARINDEX(df1.col_name,df2.col_name_aggr)<>0
3条答案
按热度按时间t40tm48m1#
您可以将
df2
从"宽"格式稍微转换为"长"格式。实际上,@jezrael指出的
explode
方法可能更好:xvw2m8pv2#
您可以按
|
拆分值,创建col_name
列,并在需要匹配任何值时删除重复项:或者,如果需要合并所有连接的值,例如使用
,
:4dc9hkyq3#
使用一个Map来检查列名中的每个条目在df2[“color”]中的对应匹配位置: