Python中创建用于多表连续拼接的自定义函数实现方法咨询
多表连接函数实现优化方案
现有dfply代码优化
你当前的写法逻辑是通顺的,可以调整为更简洁的链式结构,减少重复赋值:
def get_hcc(df, df2, df3): mid_df = df >> inner_join(df2, by=[('col1', 'col2'), ('col1', 'col3')]) >> drop_duplicates() return df3 >> left_join(mid_df, by = 'col4')
更适合工具包开发的替代方案
dfply目前已经停止维护较长时间,和高版本pandas容易出现兼容问题,推荐两个更稳定的实现方向:
- 方案1:pandas原生实现,无额外依赖,兼容性最好
直接用pandas内置的merge方法就能实现所有连接逻辑,适合对外发布的工具包使用:
如果你习惯管道式写法,也可以用pandas的import pandas as pd def get_hcc(df: pd.DataFrame, df2: pd.DataFrame, df3: pd.DataFrame) -> pd.DataFrame: # 完成第一轮内连接并去重 mid_join = pd.merge( df, df2, left_on=["col1", "col1"], right_on=["col2", "col3"], how="inner" ).drop_duplicates() # 第二轮左连接输出结果 return pd.merge(df3, mid_join, on="col4", how="left")pipe方法封装连接逻辑,实现和dplyr一致的代码风格。 - 方案2:siuba库实现,完全贴合dplyr使用习惯
siuba是目前Python生态中对dplyr语法适配最完整、维护最活跃的库,语法和你熟悉的dplyr几乎无差异:from siuba import * from siuba.dply.join import inner_join, left_join def get_hcc(df, df2, df3): return ( df >> inner_join(df2, by={"col1": "col2", "col1": "col3"}) >> distinct() >> left_join(df3, by="col4") )
多视图输出实现建议
你可以把公共的多表连接逻辑封装为一个基础工具函数,每个视图对应的独立函数直接调用这个基础函数,再做对应维度的筛选、聚合即可,既符合自动化全流程的需求,也方便后续迭代维护。
内容的提问来源于stack exchange,提问作者hamil_jp1
相关产品推荐
相关产品推荐

