dataframe - 动态连接取决于是否填写了列
问题描述
我有两个数据框,它们都包含我想要加入的相同列。但是 col3 是可选的,我想要实现的逻辑就是这样。如果所有列都已填写,则基于所有列连接,如果不是所有列都已填写,则连接 3 列。
填写所有列时的代码很简单,但我对如何实现动态连接条件感到困惑。
对于所有情况:
df1 = (
df1
.join(df2, on=['col1', 'col2', 'col3', 'col4'], how='left')
)
对于有条件的情况,我正在考虑利用合并,但这适用于表格的右侧,但不太确定左侧。
df1 = (
df1
.join(df2, on=(F.coalesce(df1.col1, df1.col2, df1.col3, df1.col4) == F.coalesce(df2.col1, df2.col2, df2.col3, df2.col4), how='left')
)
例如:df1 是
col1 col2 col3 col4 col8
a. b. c. d. 5
e. f. g. h. 3
i. j. k. l. 2
和
df2 是
col1 col2 col3 col4 col5 col23
a. b. d. type1 there
e. f. g. h. type2 was
i. j. k. l. type3 a
此示例中的最终结果将是
col1 col2 col3 col4 col5
a. b. d. type1
e. f. g. h. type2
i. j. k. l. type3
由于第一行缺少 col3 中的值,连接将使用 col1、col2 和 col4,但对于其余行,它将使用 col1、col2、col3 和 col4。
我有一种硬编码的方式来实现这一点,方法是在两边创建哈希键并使用合并,但想看看社区的建议。
我需要 df1 中的 col5 或连接的左侧,但需要根据填写的列数进行连接。这几乎就像从最确定的匹配(当所有列都被填写时)加入到最不确定的匹配(当 4 列中的 3 列都被填写时)。任何帮助表示赞赏
解决方案
推荐阅读
- c - 使用制表符进行 C 输出格式化
- entity-framework - 如何使用温莎城堡 4.1.1。在我的 ASP.NET Core MVC 项目中为我的控制器提供依赖项?
- python - 压缩两个列表,一个包含相似的元素
- opencart2.x - 当 ocmod 扩展安装 vqmod 不起作用
- video - 使用 Google Chrome 开发工具下载/查找和流式传输 Youtube 视频
- python - 如何在 Python 中更改 Firefox webdriver 的用户代理?
- css - 用于响应流体的 Bootstrap 内部间距删除
- mysql - errno: 121 "Duplicate key on write or update" 当使用 CONSTRAINT 创建表时
- c# - 如何在winform中实现同样的跑马灯效果?
- ruby-on-rails - 将参数设置为与 current_user 相同