python - 如何在 Python 中跨数据框进行匹配?
问题描述
我有 2 个数据框,一个是包含许多列的自由贸易协定数据集,列 c1 到 c91 表示特定自由贸易协定的不同国家部分,如下所示: FTA 数据
FTA 数据,例如
No Base_treaty entry_type c1 c2 c3
1 1 treaty Afghanistan India NA
2 2 treaty Algeria Egypt Ghana
3 3 treaty Algeria Angola Benin
4 4 treaty Egypt Jordan Morocco
5 5 treaty Albania Bulgaria NA
6 6 treaty Albania Croatia NA
另一个数据框包含两个特定国家 i 和 j 之间的贸易数据。贸易数据
inventor_ctry_i authority_ctry_j
1 Albania Bulgaria
2 Albania Croatia
3 Algeria Angola
4 Algeria Belgium
5 Algeria France
6 Andorra Turkey
7 Andorra United States
8 Anguilla Germany
9 Anguilla Switzerland
10 Anguilla United States
期望的输出:
No Base_treaty entry_type matched ctry1 matched ctry2
3 3 treaty Algeria Angola
5 5 treaty Albania Bulgaria
6 6 treaty Albania Croatia
我希望能够在 FTA 数据的 c1 到 c91 之间的同一行中找到贸易数据中的国家 i 和 j。如果两者都出现在特定行中,请从 FTA 中的行中提取 2 个国家,保持 no、基本条约和条目类型列不变。
任何帮助将不胜感激!
解决方案
连接与您在上面看到的合并技术有点不同。通过合并,您可以期望生成的数据集将来自父数据集的行混合在一起,通常基于一些共性。根据合并的类型,您还可能会丢失在其他数据集中没有匹配的行。
通过串联,您的数据集只是沿着一个轴(行轴或列轴)拼接在一起。从视觉上看,沿行没有参数的串联将如下所示:
concatenated = pandas.concat([df1, df2], axis=1)
有关代码的更多理解和清除,请参阅此链接。
推荐阅读
- elixir - 为什么 phx.new 不使用最新的 elixir 版本创建我的 elixir 项目?
- java - TouchAction 类在按下方法时显示错误
- reactjs - 如何在 React Typescript 应用程序中使用 Wavesurfer.js 插件?
- sql - 如何合并 sqlite3 会话扩展会话?
- gatsby - 如果所有节点恰好在该字段上为空,则 Gatsby 不会推断 graphql 字段
- python - lambda 上 AWS 中的 Python 多线程
- arrays - 哪些循环数字的 Ruby 方法实际上创建了数组,哪些没有?
- macos - 如何在 Mac(或在线)上查看 Azure 服务总线主题订阅的配置规则?
- python - 提取有限的日期模式集
- python - 使用 Groupby 对行进行分组并转换开始日期时间和结束日期时间列的日期和时间