使用 df1 中的值从 df2 检索值,其中 df2 列和索引包含一系列值

2024-04-06

我有一个数据框,其中包含员工信息,例如 Name、performance_factor_1 和 Performance_factor_2 。

我有另一个数据框,我根据 Performance_factor_1 和 Performance_actor_2 获得报酬。

df1

Name                  pf1       pf2     pf3
Adam                  14.6      8.9     59 
Bob                   13.2      9       75
Charlie               11.1      9.1     89
Dylan                 14.6      9       97
Eric                  11.1      8.8     105
Fedderick             12.5      9.2     69

df2 数据帧 2 的行是 Performance_factor_1,列是 Performance_factor_2。

pf1       8.8-8.9  9.0-9.2 9.3-9.4  9.5-9.6  9.7-10
11.1 to 14  100      200    300       400     500
8.1 to 11   200      300    400       500     600
6.1 to 8    300      400    500       600     700
below 6     400      500    600       700     800     

我想要做的是将第三列 pay 添加到 df1 ,如下所示,如果 p3 高于 70: df1

Name                  pf1       pf2      pay
Adam                  14.6      8.9      200
Bob                   13.2      9        400
Charlie               11.1      9.1      700
Dylan                 14.6      9        300
Eric                  11.1      8.8      400
Fedderick             12.5      9.2      700

我在之前的帖子中尝试过什么如何使用 DF2 中的值(使用列 A 和 B)在 DF1 上创建列 C https://stackoverflow.com/questions/57888040/how-to-create-column-c-on-df1-using-values-from-df2-using-column-a-and-b是物理列出 14,13.9 --- 0.1,0 作为 pf1 索引, 列出 8.8、8.9 - 10,然后使用查找来匹配精确的 pf1 和 pf2 值。然而,从长远来看,这不适合 df2 发生变化的情况,其中将需要大量与更改 df2 的大多数值相关的手动工作。

这是我尝试在精确值匹配查找方法中使用的代码:

df_outer.reset_index(inplace=True)

df3 = indiv.rename(index= lambda x: int(x * 10),
                 columns= lambda x: int(float(x) * 10))
out= []
for row, col in zip(df_outer['TTR'].mul(10).astype(int), df_outer['CSAT (NSE)'].mul(10).astype(int)):
    try:
        out.append(df3.at[row, col] )
    except KeyError:
        out.append(np.nan)

df_outer['Pay'] = out

df_outer.loc[df_outer['# of Closed SRs']>=70, 'Pay_new'] = df_outer['Pay']
print (df_outer)

编辑: 所以最后,我得到了以下输出。但它使用 df2(old),我想使用 df2(new) 来获取我的输出


       Name   pf1  pf2  pf3  Pay  
0       Adam  14.6  8.9   59  NaN    
1        Bob  13.2  9.0   75  400    
2    Charlie  11.1  9.1   89  700    
3      Dylan  14.6  9.0   97  300    
4       Eric  11.1  8.8  105  400    
5  Fedderick  12.5  9.2   69  NaN    

以前,我的 df2(旧)是这样的

pf1     8.8 8.9 9   9.1 9.2
14.6    100 200 300 400 500
13.2    200 300 400 500 600
12.5    300 400 500 600 700
11.1    400 500 600 700 800

现在我希望我的 df2(new) 是这样的

pf1       8.8-8.9  9.0-9.2 9.3-9.4  9.5-9.6  9.7-10
11.1 to 14  100      200    300       400     500
8.1 to 11   200      300    400       500     600
6.1 to 8    300      400    500       600     700
below 6     400      500    600       700     800   

编辑2: 我的 df 2 在 csv 中看起来像这样:


这里可以创建IntervalIndex by IntervalIndex.from_tuples http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.IntervalIndex.from_tuples.html在列和索引中df2DataFrame,然后更改查找IntervalIndex.get_loc http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.IntervalIndex.get_loc.html:

第一次测试:

print (df2.columns)
Index(['8.8-8.9', '9.0-9.2', '9.3-9.4', '9.5-9.6', '9.7-10'], dtype='object')

print (df2.index)
Index(['11.1 to 14', '8.1 to 11', '6.1 to 8', 'below 6'], dtype='object', name='pf1')

c = [(float(x[0]), float(x[1])) for x in df2.columns.str.split('-')]
i = [(0, float(x[0].split()[1])) if 'below' in x[0] else (float(x[0]), float(x[1])) 
                               for x in df2.index.str.split(' to ')]

print (i)
[(11.1, 14.0), (8.1, 11.0), (6.1, 8.0), (0, 6.0)]

print (c)
[(8.8, 8.9), (9.0, 9.2), (9.3, 9.4), (9.5, 9.6), (9.7, 10.0)]

df2.columns = pd.IntervalIndex.from_tuples(c, closed='both')    
df2.index = pd.IntervalIndex.from_tuples(i, closed='both')
print (df2)
              [8.8, 8.9]  [9.0, 9.2]  [9.3, 9.4]  [9.5, 9.6]  [9.7, 10.0]
[11.1, 14.0]         100         200         300         400          500
[8.1, 11.0]          200         300         400         500          600
[6.1, 8.0]           300         400         500         600          700
[0.0, 6.0]           400         500         600         700          800

out= []
for row, col in zip(df1['pf1'], df1['pf2']):
    try:
        out.append(df2.iat[df2.index.get_loc(row), df2.columns.get_loc(col)])
    except KeyError:
        out.append(np.nan)

df1['Pay'] = out
print (df1)
        Name   pf1  pf2  pf3    Pay
0       Adam  14.6  8.9   59    NaN
1        Bob  13.2  9.0   75  200.0
2    Charlie  11.1  9.1   89  200.0
3      Dylan  14.6  9.0   97    NaN
4       Eric  11.1  8.8  105  100.0
5  Fedderick  12.5  9.2   69  200.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 df1 中的值从 df2 检索值,其中 df2 列和索引包含一系列值 的相关文章

  • 高效地将大型 Pandas 数据帧写入磁盘

    我正在尝试找到使用 Python Pandas 高效地将大型数据帧 250MB 写入磁盘或从磁盘写入的最佳方法 我已经尝试了所有方法Python 数据分析 但表现却非常令人失望 这是一个更大项目的一部分 该项目探索将我们当前的分析 数据管理
  • 如何使用我自己的自定义表单覆盖 django-rest-auth 中的表单?

    我正在使用 django rest auth 并尝试通过覆盖表单的方法之一来修复密码重置视图中的错误 尽管我已经使用不同的 django rest auth 表单成功完成了类似的操作 但我无法让它在这个表单上工作 无论我做什么 都会使用旧的
  • 在 PhotoImage 下调整图像大小

    我需要调整图像大小 但我想避免使用 PIL 因为我无法使其在 OS X 下工作 不要问我为什么 无论如何 因为我对 gif pgm ppm 感到满意 所以 PhotoImage 类对我来说没问题 photoImg PhotoImage fi
  • 将多索引转换为行式多维 NumPy 数组。

    假设我有一个类似于以下示例的 MultiIndex DataFrame多索引文档 http pandas pydata org pandas docs stable advanced html gt gt gt df 0 1 2 3 fir
  • 从字典中绘制直方图

    我创建了一个dictionary计算 a 中出现的次数list每个键的内容 我现在想绘制其内容的直方图 这是我想要绘制的字典的内容 1 27 34 1 3 72 4 62 5 33 6 36 7 20 8 12 9 9 10 6 11 5
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • Django Web 应用程序中的 SMTP 问题

    我被要求向使用 Django Python 框架实现的现有程序添加一个功能 此功能将允许用户单击一个按钮 该按钮将显示一个小对话框 表单以输入值 我确实编写了一些代码 显示电子邮件已发送的消息 但实际上 它没有发送 My code from
  • 如何将 Pyspark Dataframe 标题设置到另一行?

    我有一个如下所示的数据框 col1 col2 col3 id name val 1 a01 X 2 a02 Y 我需要从中创建一个新的数据框 使用 row 1 作为新的列标题并忽略或删除 col1 col2 等行 新表应如下所示 id na
  • 使用 stargazer 分析包含时间序列的数据帧

    我有一个面板数据集共 10 个观测值和 3 个变量 观测值 30 的数量 10 行 国家 地区 2 列 迁移参数 相应年份的 1 列 可以这么说 我的数据框由 3 个年度数据框组成 我该如何申请观星者考虑到它是一个面板数据集 所以最大 N
  • 如何处理 Tkinter 中的窗口关闭事件?

    如何在 Python Tkinter 程序中处理窗口关闭事件 用户单击 X 按钮 Tkinter 支持一种称为协议处理程序 http web archive org web 20201111215134 http effbot org tk
  • 更新 matplotlib 中颜色条的范围

    我想更新一个contourf在函数内绘制 效果很好 然而 数据的范围发生了变化 因此我还必须更新颜色条 这就是我未能做到的地方 请参阅以下最小工作示例 import matplotlib pyplot as plt import numpy
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • 使用 Sphinx 时,如何记录没有文档字符串的成员?

    我正在为我发布的包编写文档 我发现您的文档越全面 人们就越容易找到您的包来使用 废话 实际上 我在充满爱心地编写代码的所有功能和细节方面获得了很多乐趣 然而 我对如何为类级变量编写与 Sphinx 兼容的文档感到完全困惑 特别是 我有一些e
  • Python matplotlib:将轴标签/图例从粗体更改为常规粗细

    我正在尝试制作一些出版质量的图 但遇到了一个小问题 默认情况下 matplotlib 轴标签和图例条目的权重似乎比轴刻度线重 是否有办法强制轴标签 图例条目与刻度线的重量相同 import matplotlib pyplot as plt
  • 旧版本的 spaCy 在尝试安装模型时抛出“KeyError: 'package'”错误

    我在 Ubuntu 14 04 4 LTS x64 上使用 spaCy 1 6 0 和 python3 5 为了安装 spaCy 的英文版本 我尝试运行 这给了我错误消息 ubun ner 3 NeuroNER master src pyt
  • 如何在supervisord中设置组?

    因此 我正在设置 Supervisord 并尝试控制多个进程 并且一切正常 现在我想设置一个组 以便我可以启动 停止不同的进程集 而不是全部或全无 这是我的配置文件的片段 group tapjoy programs tapjoy game1
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • 当训练和测试的特征数量不同时,如何处理生产环境中的One-Hot Encoding?

    在做某些实验时 我们通常在 70 上进行训练 在 33 上进行测试 但是 当您的模型投入生产时会发生什么 可能会发生以下情况 训练集 Ser Type Of Car 1 Hatchback 2 Sedan 3 Coupe 4 SUV 经过
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin
  • 用 Beautiful Soup 进行抓取:为什么 get_text 方法不返回该元素的文本?

    最近我一直在用 python 开发一个项目 其中涉及抓取一些网站的一些代理 我遇到的问题是 当我尝试抓取某个知名代理站点时 当我要求 Beautiful Soup 查找 IP 在代理表中的位置时 它并没有按照我的预期执行操作 我将尝试查找每

随机推荐

  • 从具体类派生抽象类

    假设我们有一个具体的class Apple Apple 对象可以被实例化 现在 有人来导出一个摘要class Peach来自苹果 它是抽象的 因为它引入了新的纯虚函数 Peach 的用户现在被迫从它派生并定义这个新函数 这是常见的模式吗 这
  • 将模型引用添加到现有 Rails 模型

    我想知道在两个之间添加关系的 正确 方法existingRails 3 中的类 给定现有模型 小丑和兔子 我想添加从兔子到小丑的引用 belongs to 我首先尝试生成迁移 rails g migration AddClownToRabb
  • SwitchPreferenceCompat:android:switchTextOff / switchTextOn 不起作用

    我正在尝试显示一个 switchPreference 它允许用户根据英里或公里显示距离 我正在使用 SwitchPreferenceCompat 支持库 根据该库 我可以使用 textSwitchOff 和 textSwitchOn 将文本
  • 如何使用 SwiftUI 获得动态视图列表

    我可以做一个静态列表 比如 List View1 View2 但是如何从数组中创建元素的动态列表呢 我尝试了以下但出现错误 包含控制流语句的闭包不能与函数生成器 ViewBuilder 一起使用 let elements Any View1
  • @WebMvcTest 由于缺少依赖项而未运行

    我想使用以下方法测试我的控制器 WebMvcTest I MockBean控制器的依赖项 但运行测试时 无法启动 运行主类时应用程序正确启动 考试 RunWith SpringRunner class WebMvcTest MetricRe
  • 将字符串转义为 sed 替换模式

    在我的 bash 脚本中 我有一个外部 从用户接收的 字符串 我应该在 sed 模式中使用它 REPLACE
  • 如何使用脚本任务声明工作表?

    我试图声明一个工作表来处理 xlsx 文件的单元格 但当我声明工作表对象时 我的 C 脚本失败 Microsoft Office Interop Excel Application xlApp new Microsoft Office In
  • 为什么 java.security.NoSuchProviderException 没有这样的提供者:BC?

    jar bcprov jdk16 145 jar 已添加到项目中 Security addProvider new org bouncycastle jce provider BouncyCastleProvider 已添加到类中 并且Bo
  • Spark清理shuffle溢出到磁盘

    我有一个循环操作 它生成一些 RDD 进行重新分区 然后进行聚合键操作 循环运行一次后 它会计算出最终的 RDD 该 RDD 会被缓存和检查点 并用作下一次循环的初始 RDD 这些 RDD 非常大 并且在每次迭代到达最终 RDD 之前都会生
  • 如何在android studio中添加轮廓材质图标?

    我正在使用 android 材质图标插件 但没有 轮廓图标 选项 任何选项或任何其他插件 目前我正在使用 https github com konifar android material design icon generator plu
  • Pandas 替换非零值

    我知道我可以用以下内容替换所有 nan 值df fillna 0 并将单个值替换为df replace 1 但是如何用单个值替换所有非零值 使用布尔索引 df df 0 value
  • 在 R 中使用 readHTMLTable 删除行

    我正在尝试使用 readHTMLTable 从 NOAA 提取模型数据 据我从 HTML 中可以看出 我试图获取的表格有多个字幕 其中每个字幕都由跨越所有列的单个单元格组成 由于某种原因 这导致 readHTMLTable 忽略紧随副标题的
  • 如何安装Android SDK Platform-Tools 24.0.0?

    我正在按照设置 Android N 预览版的指南进行操作https developer android com preview setup sdk html https developer android com preview setup
  • MVC Get 与 Post

    在研究 MVC 概念时 我了解到在 GET 操作中包含代码来更改服务器对象的状态 数据库更新等 并不是一个好习惯 缓存返回数据 已被给出作为其原因 有人可以解释一下吗 提前致谢 这是 HTTP 标准规定的 GET 动词应该是幂等且安全的 9
  • Python ConfigParser 问题

    ConfigParser 的配置文件是否必须命名为 Config ini 才能工作 我希望名称为 1Config ini 以便它显示在文件夹目录的顶部 这就是我目前拥有的 config ConfigParser ConfigParser c
  • 如何在 3.4+ 中禁用 JooQ 的自我广告消息?

    我是 JooQ 的忠实粉丝 但不幸的是 自从从 3 3 升级以来 每次在我的代码退出之前 它都会向控制台打印一条非常烦人的消息 Feb 02 2015 7 28 06 AM org jooq tools JooqLogger info IN
  • 如何将对象传递到 Xamarin Forms 自定义渲染器?

    如何将某个对象的实例传递给 Xamarin Formscustom render 这是自定义渲染器 public class LoginPageRenderer PageRenderer public override void ViewD
  • 程序集具有强名称,但我收到错误消息,指出需要强名称

    我正在尝试将第三方 COM dll 加载到我的应用程序中 一切都构建得很好 但是当我运行应用程序时 我不断从应用程序中收到此消息 无法加载文件或程序集 程序集 版本 1 0 0 0 文化 中性 PublicKeyToken null 或其依
  • 具有以编程方式确定的常量 DEFAULT 值的 ALTER TABLE

    我正在尝试向表 Employee 添加一列 MSSQL 2005 并使用另一个表 Department 的主键的默认约束 然后我将使该列成为该表的 FK 本质上 如果未提供 DepartmentID 这将根据部门名称将新员工分配到基础部门
  • 使用 df1 中的值从 df2 检索值,其中 df2 列和索引包含一系列值

    我有一个数据框 其中包含员工信息 例如 Name performance factor 1 和 Performance factor 2 我有另一个数据框 我根据 Performance factor 1 和 Performance act