Pandas:合并多个数据框并控制列名称?

2024-05-11

我想将九个 Pandas 数据帧合并到一个数据帧中,对两列进行联接,控制列名称。这可能吗?

我有九个数据集。它们都有以下列:

org, name, items,spend

我想将它们加入到具有以下列的单个数据框中:

org, name, items_df1, spend_df1, items_df2, spend_df2, items_df3...

我一直在阅读有关的文档合并和加入 http://pandas.pydata.org/pandas-docs/stable/merging.html。我目前可以将两个数据集合并在一起,如下所示:

ad = pd.DataFrame.merge(df_presents, df_trees,
                        on=['practice', 'name'],
                        suffixes=['_presents', '_trees'])

这很好用,正在做print list(aggregate_data.columns.values)显示以下列:

[org', u'name', u'spend_presents', u'items_presents', u'spend_trees', u'items_trees'...]

但是我怎样才能对九列做到这一点呢?merge似乎一次只接受两个,如果我按顺序执行,我的列名最终会变得非常混乱。


你可以使用functools.reduce https://docs.python.org/3.5/library/functools.html#functools.reduce迭代应用pd.merge对于每个数据帧:

result = functools.reduce(merge, dfs)

这相当于

result = dfs[0]
for df in dfs[1:]:
    result = merge(result, df)

为了通过on=['org', 'name']论证,你可以使用functools.partial定义合并函数:

merge = functools.partial(pd.merge, on=['org', 'name'])

由于指定了suffixes参数输入functools.partial只会允许 后缀的一个固定选择,因为这里我们需要为每个后缀选择一个不同的后缀pd.merge打电话,我认为准备 DataFrames 列是最简单的 打电话前的名字pd.merge:

for i, df in enumerate(dfs, start=1):
    df.rename(columns={col:'{}_df{}'.format(col, i) for col in ('items', 'spend')}, 
              inplace=True)

例如,

import pandas as pd
import numpy as np
import functools
np.random.seed(2015)

N = 50
dfs = [pd.DataFrame(np.random.randint(5, size=(N,4)), 
                    columns=['org', 'name', 'items', 'spend']) for i in range(9)]
for i, df in enumerate(dfs, start=1):
    df.rename(columns={col:'{}_df{}'.format(col, i) for col in ('items', 'spend')}, 
              inplace=True)
merge = functools.partial(pd.merge, on=['org', 'name'])
result = functools.reduce(merge, dfs)
print(result.head())

yields

   org  name  items_df1  spend_df1  items_df2  spend_df2  items_df3  \
0    2     4          4          2          3          0          1   
1    2     4          4          2          3          0          1   
2    2     4          4          2          3          0          1   
3    2     4          4          2          3          0          1   
4    2     4          4          2          3          0          1   

   spend_df3  items_df4  spend_df4  items_df5  spend_df5  items_df6  \
0          3          1          0          1          0          4   
1          3          1          0          1          0          4   
2          3          1          0          1          0          4   
3          3          1          0          1          0          4   
4          3          1          0          1          0          4   

   spend_df6  items_df7  spend_df7  items_df8  spend_df8  items_df9  spend_df9  
0          3          4          1          3          0          1          2  
1          3          4          1          3          0          0          3  
2          3          4          1          3          0          0          0  
3          3          3          1          3          0          1          2  
4          3          3          1          3          0          0          3  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:合并多个数据框并控制列名称? 的相关文章

  • 在Python中将距离矩阵转换为成对距离列表[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 假设Python中有以下距离矩阵 0 1 2 3 0 0 1 4 8 1 1 0 3 7 2 4 3 0 3 3 8 7 3 0 我想
  • 在python中浏览ftp目录

    我正在尝试使用 ftplib 使用 Python 3 从 ftp 服务器下载多个文件夹 我有一个文件夹名称列表 它们都位于文件夹 root 中 问题是我不知道如何浏览它们 当我使用cwd我可以进入更深的目录 但是如何再次起来呢 我正在尝试得
  • 检查对象是否是字符串列表的列表?

    是什么elegant检查对象是否是字符串列表列表的方法 没有嵌套循环 也许这里必须是构造结构化迭代的常规方法 UPD 像这样的东西 l a b c d 1 3 e 2 f def recurse iterable levels result
  • 如何计算具有较大中间值的总和

    我想计算 for n m两个值都是 1000 以内的整数 最终结果是一个不大于 1000 的数字n但中间值对于 python 来说太大了 无法处理 你怎么解决这个问题 我将函数定义如下 from scipy misc import comb
  • seaborn 未在定义的子图中绘制

    我正在尝试用这段代码并排绘制两个图表 fig ax1 ax2 plt subplots 1 2 sns displot x X train Age hue y train ax ax1 sns displot x X train Fare
  • 您能否从函数、args 和 kwargs 确定变量将如何分配?

    我有一些样板逻辑 我想包装几个具有相同可选关键字的函数 现在看起来像下面的代码 但是 这仅处理 opt key 作为关键字传递的情况 而不是按位置传递 解决这个问题的一种方法是了解如何解决参数分配 是否有一些元函数接受函数 args 和 k
  • VS Code Pylance 不突出显示变量和模块

    我正在使用带有 Python 和 Pylance 扩展的 VS Code 我遇到的问题是 Pylance 扩展没有对模块和数据框等内容进行语法突出显示 我希望顶部的模块为绿色 df 变量为蓝色 我正在使用默认的深色 颜色主题 这是我的 VS
  • Anaconda (Python) - Windows 10 上的 Cmder 集成

    我在 Windows 10 64 位上通过 Anaconda 让 Cmder 使用 Python 时遇到了一些麻烦 我让 Anaconda 工作得很好 测试过用 matplotlib 绘制一些东西 它与 Anaconda Prompt 一起
  • Python 中的“finally”总是执行吗?

    对于Python中任何可能的try finally块 是否保证finally块总是会被执行吗 例如 假设我在except block try 1 0 except ZeroDivisionError return finally print
  • python 中的优化标准化

    在优化过程中 对输入参数进行归一化 使它们处于同一数量级 通常会很有帮助 这样收敛效果会更好 例如 如果我们想要最小化 f x 而合理的近似值是 x0 1e3 1e 4 则将 x0 0 和 x0 1 归一化到大约相同的数量级可能会有所帮助
  • 如何使用 Python 3 在 OpenCV 3 上正确加载 cv2.KeyPoint 和描述符?

    有一天 我不得不恢复一个使用 OpenCV 3 和 Python 2 7 的旧项目 在此代码中 要加载 cv2 KeyPoint 我执行以下操作 import numpy as np import cPickle import cv2 ke
  • 是否有比 .apply() 更慢或更受控制的替代方案?

    所以这似乎是一个奇怪的问题 但我有一只熊猫DataFrame其中包含地址 我想对其进行地理编码 以便获得纬度和经度 我有可以使用的代码 apply 感谢这个非常有帮助的线程 使用 geopy pandas 的新列坐标 https stack
  • 通过 Tweepy 在 Twitter 上更新状态时的回溯

    我一直在尝试使用 Twitter 在 Twitter 上发布我的 Rpi 读数tweepy 但首先我想检查一下是否tweepy本来可以正常工作 但事实并非如此 我正确安装了软件包 但是当我尝试运行简单的代码来发布某些内容时 出现错误 是的
  • 使用 PyCharm 分析 Django

    即使在开发环境中 我的应用程序也相当慢 所以我想找出是什么导致它变慢 以便我可以尝试修复它 我了解调试工具栏 根据它的报告 数据库查询和下载的源都不是问题 所以它一定是业务逻辑 但是 我无法使用 Django 服务器运行 PyCharm 分
  • 从另一个列表的元素创建一个新列表,引用后者的元素

    我想从前一个元素创建一个新列表 但不复制它们 这就是发生的事情 In 23 list range 10 In 24 list2 list 0 4 In 25 list Out 25 0 1 2 3 4 5 6 7 8 9 In 26 lis
  • 带有 graphviz_layout 的水平树

    在Python中 使用networkx 我可以用以下方法绘制垂直树 g nx balanced tree 2 4 pos nx graphviz layout g prog dot nx draw g pos labels b all no
  • 如果我更改当前工作目录,为什么 __file__ 会变成无效路径?

    执行中test py from tmp import os print os path abspath file os chdir var print os path abspath file output tmp test py var
  • 从 s3 获取 ogg 轨道的长度而不下载整个文件

    如何在不下载整个文件的情况下获取 ogg 文件的播放长度 我知道这是可能的 因为 HTML5 标签和 VLC 都可以在加载 URL 后立即显示整个播放长度 而无需下载整个文件 有标题或我可以阅读的内容吗 也许甚至是比特率 我可以将其除以文件
  • 每次 apache 重新启动时,flask-login 会话都会被破坏

    我正在使用烧瓶登录https github com maxcountryman flask login https github com maxcountryman flask login和领域记住登录用户 http packages py
  • Python 线程与 Linux 中的多处理

    基于此question https stackoverflow com questions 807506 threads vs processes in linux我假设创建新流程应该几乎和创造新线程在Linux中 然而 很少的测试显示出截

随机推荐

  • 是否可以在一次 git 调用中取消设置多个 git 配置值,而不是逐一取消设置?

    我需要自动取消全局 git 配置文件中的许多别名 diff difftool merge mergetool 设置 现在我正在打电话git config global unset对于他们每个人来说 这有点慢 嗯 相对而言 大约需要 3 秒
  • 确定 R 中的组是否重复某个值

    我有一个包含许多列和行的数据 我想通过创建新的逻辑变量来确定某个组的值是否重复 相同 所以我的数据如下所示 v0 lt c 1 2 3 4 5 6 7 8 9 v1 lt c a b a c e c b b e v2 lt c R NA R
  • Yii2 Composer 管理 Bower 和 Bower-vendor 中的包

    我已经使用 yii2 一段时间了 但我不知道如何管理我的包 在这方面我有两个问题 当我将包添加到 yii2 时 它会在vendor bower bower assets 中下载 当 yii2 发布包时 它会在vendor bower下查找资
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • MySQL-分割字符串

    我的问题与这篇文章类似 MySQL 中的 反向 GROUP CONCAT https stackoverflow com questions 17308669 reverse group concat in mysql 然而 而不是反转gr
  • C - 获取外部IP地址

    我需要通过 C C 调用获取我的公共 IP 地址 我知道作为替代方案 我可以从 http whatismyip akamai com 等外部链接获取 我写了一个示例来获取外部IP地址 但我的程序没有返回外部 IP 地址 我正在获取内部 IP
  • 为什么代码分析不警告 NotImplementedException?

    我非常确定 Visual Studio Code Analysis 的早期版本会警告有关 NotImplementedException 的使用 即包含此异常的任何成员 throw new NotImplementedException 会
  • 进程名称长度的最大允许限制是多少?

    进程名称允许的最大长度是多少 我正在读取进程名称 proc pid stat文件 我想知道我需要的最大缓冲区 我很确定有一个可配置的限制 但就是找不到它在哪里 根据man 2 prctl http man7 org linux man pa
  • Ansible 测试变量以什么开头

    我需要能够安装 MySQL 库 Python 有 1 个用于 v2 的包和另一个用于 v3 的包 我需要能够告诉 Ansible 要安装哪个包 name Ensure MySQL python is installed pip name M
  • Java:将秒转换为分钟、小时和天[重复]

    这个问题在这里已经有答案了 任务是 输出应如下所示 最好回显输入 您输入了 500 000 秒 即 5 天 18 小时 53 分钟 20 秒 5天18 53 20小时 我该怎么做呢 最容易理解和做到的方法是什么 讲师还说 没有硬编码 我不太
  • IE9支持CSS线性渐变吗?

    有了 Chrome Safari 和 Firefox webkit gradient and moz linear gradient特性 我怎样才能用 IE9 做同样的事情呢 最好的跨浏览器解决方案是 background fff back
  • SSHKit::Runner::ExecuteError:以 root@co 身份执行时出现异常:Jenkins Job 的 shell 脚本中的用户 root@ 身份验证失败

    我正在尝试从 Jenkins Job 运行 cap 部署命令 它不断抛出以下错误 我也在部署服务器中添加了 ssh 密钥 我能够从配置 Jenkins 的服务器成功部署 但是当我运行该作业时 会引发身份验证错误 这对我来说真的很重要 有人可
  • 猫头鹰轮播,制作自定义导航

    所以我有一个包含三张图像的猫头鹰旋转木马 我还在左侧和右侧添加了自定义导航箭头 png 图像 然而 这些箭头目前是无用的 因为我找不到一种方法来真正让它们在我的猫头鹰旋转木马的图像之间切换 我无休止地寻找 找不到解决方案 有任何想法吗 您需
  • 如何在notepad++中格式化JSON

    我想在记事本 中格式化JSON字符串 请指导我该怎么做 我研究了这个解决方案记事本 JSON 格式 https stackoverflow com questions 1560464 how to reformat json in note
  • 如何制作 SagePay BuyNow 按钮?

    通过 PayPal 我可以非常轻松地创建一个 BuyNow 按钮 其中包含我的商家信息 价格 税金 运费等 这在 SagePay 中可行吗 所需的系统称为 SagePay Form 与 PayPal 的 BuyNow 按钮 PDT 流程相似
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 什么是欣德利米尔纳?

    我遇到过这个词欣德利 米尔纳 我不确定是否理解它的意思 我已阅读以下帖子 史蒂夫 叶格 动态语言的反击 http steve yegge blogspot com 2008 05 dynamic languages strike back
  • 如何在Python中显示坐标网格线的变换?

    假设我有常规的笛卡尔坐标系 x y 并且我考虑一个矩形网格区域 D 分成小方块 我想看看域 D 如何在 Python 中的坐标变换 T x y gt u x y v x y 下映射 我正在寻找这样的东西 See here https mat
  • Javascript 最佳实践,为什么使用逗号来链接函数/变量声明?

    我一直在为 jQuery jQueryLog 开发一个插件 以允许调试链选择器和返回值 如果你想检查一下 你可以这样做here http www jquerylog com 这已经是第二个版本了 第一个版本实际上是经过编辑的 jQuery
  • Pandas:合并多个数据框并控制列名称?

    我想将九个 Pandas 数据帧合并到一个数据帧中 对两列进行联接 控制列名称 这可能吗 我有九个数据集 它们都有以下列 org name items spend 我想将它们加入到具有以下列的单个数据框中 org name items df