逐行比较两个不同长度的数据帧,并为每行添加具有相等值的列

2024-05-01

我在 python pandas 中有两个不同长度的数据帧,如下所示:

df1:                                 df2:

      Column1  Column2 Column3            ColumnA ColumnB 
    0    1       a       r              0    1       a
    1    2       b       u              1    1       d
    2    3       c       k              2    1       e
    3    4       d       j              3    2       r
    4    5       e       f              4    2       w
                                        5    3       y 
                                        6    3       h

我现在想做的是比较 df1 的 Column1 和 df2 的 ColumnA 。对于每个“命中”,其中 df2 中的 ColumnA 中的行与 df1 中的 Column1 中的行具有相同的值,我想将一列附加到 df1,其中包含找到“命中”的行的 df2 的 ColumnB 的值,这样我的结果看起来像这样:

df1:

   Column1  Column2  Column3  Column4 Column5  Column6
0     1        a        r        a       d        e
1     2        b        u        r       w
2     3        c        k        y       h
3     4        d        j
4     5        e        f

到目前为止我尝试过的是:

for row in df1, df2:
   if df1[Column1] == df2[ColumnA]:
      print 'yey!'

这给了我一个错误,说我无法比较两个不同长度的数据帧。所以我尝试:

for row in df1, df2:
    if def2[def2['ColumnA'].isin(def1['column1'])]:
        print 'lalala' 
    else:
        print 'Nope'

就我得到输出而言,它“有效”,但我不认为它会迭代行并比较它们,因为它只打印“lalala”两次。因此,我进行了更多研究,找到了一种迭代数据帧每一行的方法,即:

for index, row in df1.iterrows():
    print row['Column1]

但我不知道如何使用它来比较两个数据帧的列并获得我想要的输出。

任何有关如何执行此操作的帮助将不胜感激。


我建议您使用 DataFrame API,它允许在以下方面与 DF 一起操作join, merge http://pandas.pydata.org/pandas-docs/stable/merging.html, groupby http://pandas.pydata.org/pandas-docs/stable/groupby.html等等。您可以在下面找到我的解决方案:

import pandas as pd

df1 = pd.DataFrame({'Column1': [1,2,3,4,5], 
    'Column2': ['a','b','c','d','e'], 
    'Column3': ['r','u','k','j','f']})

df2 = pd.DataFrame({'Column1': [1,1,1,2,2,3,3], 'ColumnB': ['a','d','e','r','w','y','h']})

dfs = pd.DataFrame({})
for name, group in df2.groupby('Column1'):
    buffer_df = pd.DataFrame({'Column1': group['Column1'][:1]})
    i = 0
    for index, value in group['ColumnB'].iteritems():
        i += 1
        string = 'Column_' + str(i)
        buffer_df[string] = value

    dfs = dfs.append(buffer_df)

result = pd.merge(df1, dfs, how='left', on='Column1')
print(result)

结果是:

   Column1 Column2 Column3 Column_0 Column_1 Column_2
0        1       a       r        a        d        e
1        2       b       u        r        w      NaN
2        3       c       k        y        h      NaN
3        4       d       j      NaN      NaN      NaN
4        5       e       f      NaN      NaN      NaN

附注更多细节:

1) 对于 df2 我产生groups按“Column1”。单人group是一个数据框。下面的例子:

   Column1 ColumnB
0        1       a
1        1       d
2        1       e

2)对于每个group我生成数据框缓冲区_df:

   Column1 Column_0 Column_1 Column_2
0        1        a        d        e

3)之后我创建DFdfs:

   Column1 Column_0 Column_1 Column_2
0        1        a        d        e
3        2        r        w      NaN
5        3        y        h      NaN

4)最后我执行左连接df1 and dfs获得所需的结果。

2)* 缓冲区_df迭代产生:

step0 (buffer_df = pd.DataFrame({'Column1': group['Column1'][:1]})):
            Column1
         5       3

step1 (buffer_df['Column_0'] = group['ColumnB'][5]):      
            Column1 Column_0
         5       3       y

step2 (buffer_df['Column_1'] = group['ColumnB'][5]):      
            Column1 Column_0 Column_1
         5       3       y       h
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逐行比较两个不同长度的数据帧,并为每行添加具有相等值的列 的相关文章

随机推荐

  • Xcode 更改未修改的 Storyboard 和 XIB 文件

    从 git 工作流程的角度来看 当多人协作时 故事板是一种巨大的痛苦 例如 storyboard 文件中的 XML 有其起始位置
  • 如何循环遍历 Windows 窗体窗体中的所有控件或如何查找特定控件是否是容器控件?

    我会告诉我的要求 我需要有一个keydown中每个控件的事件Windows 窗体 http en wikipedia org wiki Windows Forms形式 如果我必须对所有 keydown 事件执行的操作相同 那么最好这样做 而
  • Rails 3.1 资源在服务器重新启动之前无法识别 rmagick 上传的新图像

    我有我的Rails 3 1 0应用程序运行passenger in production环境 我有一个部分 应用程序允许用户更改他的个人资料图片 因此我使用 ajax 上传器上传图像 在我的控制器中 我上传文件并使用 rmagick 为图像
  • Jquery UI 滑块 - 输入值并将滑块移动到位置

    我想知道是否有人找到了实际填充滑块的输入框并使其滑动到适当位置 onBlur 的解决方案或示例 目前 众所周知 它只是用您所在的位置更新此值在 因此 在某些方面 我试图扭转这个令人惊叹的滑块的功能 我找到的一个链接 http www web
  • 如何使 Angularjs 应用程序可抓取

    我使用 Angular js 构建单页应用程序 我的问题是如何使应用程序可爬行 因为路由是在客户端使用 ng view 处理的 而服务器只返回简单的头文件 网站链接 http india elections in http india el
  • 如何更新 Android 上的 Google Analytics 清单?

    我正在尝试禁用 Google Firebase Analytics 的自动屏 幕报告 在里面Firebase 博客文章 https firebase googleblog com 2020 08 google analytics manua
  • 制作波浪动画

    我正在尝试制作音频波动画 这段代码有什么问题 我尝试将翻译更改为比例 但没有成功 有人可以给我一些动画练习的链接吗 webkit box sizing border box box sizing border box webkit pers
  • 调用过程默认值而不将值绑定到 Jdbc 中的参数

    我正在尝试打电话PL SQL为其某些参数定义了默认值的过程 我正在这样做使用CallableStatement in JDBC 该过程有大量已定义默认值的参数 我不想在 Java 代码中显式设置默认值 这样做会使维护代码变得更加困难 如果
  • 当需要切换rootViewController时

    我一直在开发一个 Swift 项目 我有两个视图控制器 登录视图控制器和主页视图控制器 当用户启动应用程序时 如果用户未登录 我想显示登录视图控制器 另一方面 如果用户登录 我想显示主页视图控制器 所以流程会是这样的 当用户未登录时 显示
  • 使用 Networkx (Python) 进行图遍历

    我正在使用 Networkx 来管理依赖关系图 假设我有这个图 每个字母代表一个服务器 gt gt gt G nx Graph gt gt gt G add edge A B gt gt gt G add edge A H gt gt gt
  • Java - oracle.jdbc.dcn.DatabaseChangeEvent - 获取更改的行

    我正在使用 oracle jdbc dcn DatabaseChangeEvent 来从 Oracle DB 获取事件通知 public class TListener implements DatabaseChangeListener p
  • 无法更改 php 会话 cookie 名称

    我将现有且成功运行的站点复制到新的开发服务器 新服务器上的登录现在已损坏 我追踪到虽然会话 cookie 已重命名 ini set session name DOMAIN1 浏览器继续将会话 cookie 存储为 PHPSESSID 当我从
  • grpc找不到protobuf库

    我检查了 grpc 安装并完成了构建和安装 现在当我尝试 find package gRPC CONFIG REQUIRED I get CMake Error at CMakeLists txt 15 find package Found
  • Django 分页和“当前页面”

    我目前正在开发一个 Django 应用程序 它将利用臭名昭著的 分页 技术 我试图弄清楚 django core paginator 模块是如何工作的 我有一个带有问题模型的应用程序 我将使用此分页器列出所有问题 每页有 20 个问题 de
  • 重用named_scope来定义另一个named_scope

    我所看到的问题本质 有一天 如果我没有记错的话 我看到了一个重用一个named scope来定义另一个named scope的例子 像这样的东西 不记得确切的语法 但这正是我的问题 named scope billable conditio
  • Perl 6:反式(%h) 与反式(%h.keys => %h.values)

    还有一个问题是关于hash作为论据trans 在下面的代码中简单地取hash给出了错误的结果 但将其替换为keys and values使其正确 怎么了 my alph1
  • TSQL动态确定SP/Function的参数列表

    我想将通用日志记录片段写入存储过程集合中 我写这篇文章是为了对我们的前端用户体验进行定量测量 因为我知道前端软件使用了哪些 SP 以及它们的使用方式 我想在开始性能调优之前使用它来收集基线 然后显示调优的结果 我可以动态地从 PROCID
  • RSpec 中出现意外的 nil 变量

    我有一个非常基本的 RSpec 示例 但不起作用 这是代码 require spec helper describe Referral type functionality do describe Affiliate system do b
  • ChangeNotifierProxyProvider 给出可能为空的错误

    所以 遵循ChangeNotifierProxyProvider 文档 https pub dev documentation provider latest provider ChangeNotifierProxyProvider cla
  • 逐行比较两个不同长度的数据帧,并为每行添加具有相等值的列

    我在 python pandas 中有两个不同长度的数据帧 如下所示 df1 df2 Column1 Column2 Column3 ColumnA ColumnB 0 1 a r 0 1 a 1 2 b u 1 1 d 2 3 c k 2