python - 在键列的子值上连接两个数据框
问题描述
我目前正在尝试在 Key 列上加入/合并两个 df,其中 df1 中的键是独立值,例如 5,但在 df2 中,键可以包含多个值,例如 [5,6,13]。例如像这样:
df1 = pd.DataFrame({'key': [["5","6","13"],["10","7"],["6","8"]]})
df2 = pd.DataFrame({'sub_key': ["5","10","6"]})
但是,我的 df 要大得多,并且包含许多列,所以一个有效的解决方案会很棒。
因此,我想要一张这样的表格:
键1 | 键2 |
---|---|
5 | 5,6,13 |
10 | 10,7 |
等等 ....
我已经尝试将这种方法应用于我的代码,但它不起作用:
df1['join'] = 1
df2['join'] = 1
merged= df1.merge(df2, on='join').drop('join', axis=1)
df2.drop('join', axis=1, inplace=True)
merged['match'] = merged.apply(lambda x: x.key(x.sub_key), axis=1).ge(0)
我还尝试拆分和分解列并加入单个值,但问题是,并非所有列值都被正确拆分,一旦加入,我需要将所有内容组合回一个单元格。
帮助将不胜感激!
解决方案
如果您只想匹配第一个键:
df1['sub_key'] = df1.key.str[0]
df1.merge(df2)
如果你想匹配任何键:
df3 = df1.explode('key').rename(columns={'key':'sub_key'})
df3 = df3.join(df1)
df3.merge(df2)
编辑:第一个版本有一个小错误,已修复。
推荐阅读
- here-api - 查找航路点附近的高速公路
- tsql - 如何在与 SQL Server 2008 兼容的 SQL Server 2016 中引发错误
- c++ - 无法弄清楚错误来自哪里(调试器说分段错误)
- c++ - 遵循 C++ 中的构造函数执行顺序
- python - 如何使用 python 在子进程中运行或发送 sudo 命令?
- mongodb - 排序时未使用 MongoDB 索引,尽管前缀匹配
- react-native - 根据一个参数修改header
- html - flexbox - 与百分比宽度一起使用时,对齐内容不起作用
- openstack - openstack 堆栈展示
- sql - 在 SQL 中查找子字符串