使用 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 列和索引包含一系列值 的相关文章

  • 为什么 tkinter / window.update 在我的程序中随着时间的推移变得更慢?

    我发现当我调用 window update 时 当向窗口写入的内容较少时 它的运行速度会更快 但后来 当我向窗口写入更多元素时 window update 需要更长的时间 请参阅下面的我的代码 您可以看到它在更新窗口之前一次向屏幕 100
  • 子进程改变目录

    我想在子目录 超级目录中执行脚本 我需要首先进入该子目录 超级目录 我无法得到subprocess进入我的子目录 tducin localhost Projekty tests ve python Python 2 7 4 default
  • Python 遍历目录树的方法是什么?

    我觉得分配文件和文件夹并执行 item 部分有点黑客 有什么建议么 我正在使用Python 3 2 from os import from os path import def dir contents path contents list
  • Python的reduce()短路了吗?

    If I do result reduce operator and False 1000 得到第一个结果后它会停止吗 自从False anything False 相似地 result reduce operator or True 10
  • 为什么导入 pdb 时出现此错误? “模块”对象没有属性“ascii_letters”

    尝试调试我的代码 我正在导入库pdb import sys from subprocess import check call import pdb functions if name main Code 我收到此错误 File reg p
  • Pyspark 数据框逐行空列列表

    我有一个 Spark 数据框 我想创建一个新列 其中包含每行中具有 null 的列名称 例如 原始数据框是 col 1 col 2 col 3 62 45 null 62 49 56 45 null null null null null
  • Django 的 URL 覆盖率测试为 0%,为什么?

    使用姜戈鼻子 我对 URL 进行了测试 但 URL 覆盖率仍然为 0 为什么 python manage py 测试配置文件 这是我的报道 Name Stmts Miss Cover Missing profiles 0 0 100 pro
  • 错误:无法访问文件“$libdir/plpython2”:没有这样的文件或目录

    我正在运行 postgresql 9 4 PostgreSQL 9 4 4 on x86 64 unknown linux gnu compiled by gcc GCC 4 1 2 20070626 Red Hat 4 1 2 14 64
  • 如何对这个 Flask 应用程序进行单元测试?

    我有一个 Flask 应用程序 它使用 Flask Restless 来提供 API 我刚刚写了一些身份验证来检查 如果消费者主机被识别 该请求包含一个哈希值 通过加密 POST 的请求内容和 GET 的 URL 以及秘密 API 密钥来计
  • Django - 电子邮件发送两次

    每当我使用如下所示的电子邮件设置从views py调用下面的方法时 电子邮件的两份副本都会发送给收件人 并且我收到如下所示的错误 def sendEmailBasic request msg EmailMessage Request Cal
  • 一起使用 Flask 和 Tornado?

    我是以下的忠实粉丝Flask 部分是因为它很简单 部分是因为它有很多扩展 http flask pocoo org extensions 然而 Flask 是为了在 WSGI 环境中使用而设计的 而 WSGI 不是非阻塞的 所以 我相信 它
  • 如何在 Python 中从 HTML 页面中提取 URL [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我必须用Python 编写一个网络爬
  • Spark中的count和collect函数抛出IllegalArgumentException

    当我使用时抛出此异常时 我尝试在本地 Spark 上加载一个小数据集count 在 PySpark 中 take 似乎有效 我试图搜索这个问题 但没有找到原因 看来RDD的分区有问题 有任何想法吗 先感谢您 sc stop sc Spark
  • 如何在C++中列出Python模块的所有函数名称?

    我有一个 C 程序 我想导入一个 Python 模块并列出该模块中的所有函数名称 我该怎么做 我使用以下代码从模块中获取字典 PyDictObject pDict PyDictObject PyModule GetDict pModule
  • 大型数据集上的 Sklearn-GMM

    我有一个很大的数据集 我无法将整个数据放入内存中 我想在这个数据集上拟合 GMM 我可以用吗GMM fit sklearn mixture GMM 重复小批量数据 没有理由重复贴合 只需随机采样您认为机器可以在合理时间内计算的尽可能多的数据
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并
  • 最小硬币找零问题——回溯

    我正在尝试用最少数量的硬币解决硬币找零问题 采用回溯法 我实际上已经完成了它 但我想添加一些选项 按其单位打印硬币数量 而不仅仅是总数 这是我下面的Python代码 def minimum coins coin list change mi
  • Python 枚举子集迭代

    我想迭代以下枚举的子集 class Items enum Enum item1 0 item2 1 item3 2 item4 3 item5 4 item6 5 item7 6 item8 7 说我想 for item in Items
  • Scala:如何获取数据框中的行范围

    我有一个DataFrame通过运行创建sqlContext readParquet 文件的一个 The DataFrame由 300 M 行组成 我需要使用这些行作为另一个函数的输入 但我想以较小的批次进行操作 以防止 OOM 错误 目前
  • 从数据集的给定日期范围中提取属于一天的数据

    我有一个数据集 日期范围为 2018 年 1 月 12 日到 8 月 3 日 其中包含一些值 维数为my df数据框是 my df shape 9752 2 每行包含半小时频率 第一行开始于2018 01 12 my df iloc 0 D

随机推荐

  • 从具体类派生抽象类

    假设我们有一个具体的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