我有两个 Dataframe
df1 = pd.DataFrame({'col1': [1,2,3], 'col2': [4,5,6]})
df2 = pd.DataFrame({'col3': [1,5,3]})
并且希望将df1
左合并到df2
。但是,我在df1
中没有固定的合并列。如果col1
的单元格值存在于df2.col3
中,我希望在col1
上合并,如果col2
的单元格值存在于df2.col3
中,我希望在col2
上合并。因此,在上面的示例中,在col1
上合并,col2
,然后是col1
。(这只是一个例子,我实际上不止有两列)。我可以这样做,但我不确定这样做是否合适。
df1 = df1.assign(merge_col = np.where(df1.col1.isin(df2.col3), df1.col1, df1.col2))
df1.merge(df2, left_on='merge_col', right_on='col3', how='left')
有没有更好的解决办法?
2条答案
按热度按时间nhaq1z211#
按首选顺序执行合并,并使用
combine_first
合并合并:对于具有许多列的泛型方法:
输出量:
更好的示例:将另一列添加到
df2
以说明合并:输出量:
w8rqjzmb2#
我认为您的解决方案可以修改为获取合并的
Series
,比较列表中的所有列,然后合并此Series
:s
的解释:按DataFrame.isin
比较所有列,如果按DataFrame.where
不匹配,则创建缺失值,对于优先级,使用按位置选择第一列来填充缺失值:您的解决方案与帮助器列:
s
的解释:按DataFrame.isin
比较所有列,如果按DataFrame.where
不匹配,则创建缺失值,对于优先级,使用按位置选择第一列来填充缺失值: