将最后一行除以组的第一行

2024-05-06

我有一个如下所示的数据框:

ID  Quantity Time
54  100      2020-01-01 00:00:05
54  87       2020-01-01 00:00:06
58  400      2020-01-01 00:00:08
58  390      2020-01-01 00:00:14
...

我已经按 ID 对数据帧进行了分组,并且只获取每个 ID 的第一个和最后一个值。

g = df.groupby('ID')

(pd.concat([g.head(1), g.tail(1)])
   .drop_duplicates()
   .sort_values('ID')
   .reset_index(drop=True))

现在,我想将每个 ID 最后一行的数量除以第一行的数量,并将其保存到仅最后一个条目的“结果”列中。

结果 df 应如下所示:

ID  Quantity  Time                  Result
54  100       2020-01-01 00:00:05   
54  87        2020-01-01 00:00:06   0.87
58  400       2020-01-01 00:00:08
58  390       2020-01-01 00:00:14   0.975

谢谢你的帮助!


如果总有成对的ID您可以通过索引选择所有对行[1::2]并除以移位值Series.shift http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.shift.html:

df['Result'] = df['Quantity'].iloc[1::2].div(df['Quantity'].shift())
print (df)
   ID  Quantity                 Time  Result
0  54       100  2020-01-01 00:00:05     NaN
1  54        87  2020-01-01 00:00:06   0.870
2  58       400  2020-01-01 00:00:08     NaN
3  58       390  2020-01-01 00:00:14   0.975

与小组合作的解决方案:

另一个想法是使用GroupBy.transform http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.transform.html with GroupBy.first http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.core.groupby.GroupBy.first.html并除以最后一个值ID by DataFrame.drop_duplicates http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop_duplicates.html:

first = df.groupby('ID')['Quantity'].transform('first')
df['Result'] = df.drop_duplicates('ID', keep='last')['Quantity'].div(first)
print (df)
   ID  Quantity                 Time  Result
0  54       100  2020-01-01 00:00:05     NaN
1  54        87  2020-01-01 00:00:06   0.870
2  58       400  2020-01-01 00:00:08     NaN
3  58       390  2020-01-01 00:00:14   0.975

或者使用 lambda 函数并替换为NaN by Series.mask http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.mask.html:

df['Result'] = (df.groupby('ID')['Quantity'].transform(lambda x: x.iat[-1] / x.iat[0])
                  .mask(df['ID'].duplicated(keep='last')))
print (df)

   ID  Quantity                 Time  Result
0  54       100  2020-01-01 00:00:05     NaN
1  54        87  2020-01-01 00:00:06   0.870
2  58       400  2020-01-01 00:00:08     NaN
3  58       390  2020-01-01 00:00:14   0.975

如果至少有一组具有独特的ID?

print (df)
   ID  Quantity                 Time
0  54       100  2020-01-01 00:00:05
1  58       400  2020-01-01 00:00:08
2  58       390  2020-01-01 00:00:14

#failed
df['Result1'] = df['Quantity'].iloc[1::2].div(df['Quantity'].shift())
#working correct
first = df.groupby('ID')['Quantity'].transform('first')
df['Result2'] = df.drop_duplicates('ID', keep='last')['Quantity'].div(first)
#working correct
df['Result3'] = (df.groupby('ID')['Quantity'].transform(lambda x: x.iat[-1] / x.iat[0])
                  .mask(df['ID'].duplicated(keep='last')))
print (df)
   ID  Quantity                 Time  Result1  Result2  Result3
0  54       100  2020-01-01 00:00:05      NaN    1.000    1.000
1  58       400  2020-01-01 00:00:08      4.0      NaN      NaN
2  58       390  2020-01-01 00:00:14      NaN    0.975    0.975
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将最后一行除以组的第一行 的相关文章

  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 安装了 32 位的 Python,显示为 64 位

    我需要运行 32 位版本的 Python 我认为这就是我在我的机器上运行的 因为这是我下载的安装程序 当我重新运行安装程序时 它会将当前安装的 Python 版本称为 Python 3 5 32 位 然而当我跑步时platform arch
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 使用字典映射数据帧索引

    为什么不df index map dict 工作就像df column name map dict 这是尝试使用index map的一个小例子 import pandas as pd df pd DataFrame one A 10 B 2
  • 立体太阳图 matplotlib 极坐标图 python

    我正在尝试创建一个与以下类似的简单的立体太阳路径图 http wiki naturalfrequent com wiki Sun Path Diagram http wiki naturalfrequency com wiki Sun Pa
  • YOLOv8获取预测边界框

    我想将 OpenCV 与 YOLOv8 集成ultralytics 所以我想从模型预测中获取边界框坐标 我该怎么做呢 from ultralytics import YOLO import cv2 model YOLO yolov8n pt
  • 如何在 Python 中解析和比较 ISO 8601 持续时间? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 Python v2 库 它允许我解析和比较 ISO 8601 持续时间may处于不同单
  • 如何在不丢失注释和格式的情况下更新 YAML 文件 / Python 中的 YAML 自动重构

    我想在 Python 中更新 YAML 文件值 而不丢失 Python 中的格式和注释 例如我想改造 YAML 文件 value 456 nice value to value 6 nice value 界面类似于 y yaml load
  • 在Python中检索PostgreSQL数据库的新记录

    在数据库表中 第二列和第三列有数字 将会不断添加新行 每次 每当数据库表中添加新行时 python 都需要不断检查它们 当 sql 表中收到的新行数低于 105 时 python 应打印一条通知消息 警告 数量已降至 105 以下 另一方面
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 如何通过 TLS 1.2 运行 django runserver

    我正在本地 Mac OS X 机器上测试 Stripe 订单 我正在实现这段代码 stripe api key settings STRIPE SECRET order stripe Order create currency usd em
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • javascript 是否有等效的 __repr__ ?

    我最接近Python的东西repr这是 function User name password this name name this password password User prototype toString function r
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 如何在 pygtk 中创建新信号

    我创建了一个 python 对象 但我想在它上面发送信号 我让它继承自 gobject GObject 但似乎没有任何方法可以在我的对象上创建新信号 您还可以在类定义中定义信号 class MyGObjectClass gobject GO
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 使用随机放置的 NaN 创建示例 numpy 数组

    出于测试目的 我想创建一个M by Nnumpy 数组与c随机放置的 NaN import numpy as np M 10 N 5 c 15 A np random randn M N A mask np nan 我在创建时遇到问题mas

随机推荐

  • 获取带有注释的所有类并将它们添加到 android 中的 hashMap

    我不确定这是否可能 但我基本上希望能够轻松地将新项目添加到列表中 只需添加带有特殊注释的类即可 我能想到的唯一例子就是我目前正在做的事情 用户可以完成很多 挑战 目前我的应用程序中有一个用于 挑战 的包 我希望能够在该包中创建一个新类 给它
  • 来自函数参数的动态 Typescript 对象属性

    我有一个函数 它接受一个n参数的数量 并生成一个新对象 其中包含参数到唯一哈希的键值映射 Typescript 有没有办法从函数的参数动态推断返回对象的键 Example 生成字典的CreateActionType函数 function c
  • 使用 qtp 功能单击特定链接

    我想通过创建一个在操作中调用的函数来自动执行 Flipkart 的登录过程 Function Website this is the function Systemutil Run iexplore exe http www flipkar
  • VBA写入Word,更改字体格式

    我正在 Excel 中编写 VBA 脚本 以将基于某些表格的文本输出到 Word 文档 在大多数情况下 一切都很顺利 我在 stackoverflow 的帮助下自学 我有一个相当长的代码 因此将其全部复制到这里会很困难 我将尝试展示相关部分
  • 时间序列数据 - 如何[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑进行一项为期一个月的研究 受试者记录他的饮酒量和排尿频率 我想让受试者每天记录这些活动 这样我就有一个月的数据 每天的排尿次
  • Kubernetes Pod 动态环境变量

    我需要能够将自定义环境变量分配给 Pod 的每个副本 一个变量应该是一些随机的 uuid 另一个唯一的数字 怎么可能实现呢 我更愿意继续使用带有副本的 部署 如果这不是开箱即用的 如何通过自定义复制控制器 控制器管理器来实现 有没有可用的钩
  • 使用 SESSION_CONTEXT 的实体框架核心行级安全性

    我正在使用 ASP NET Core 和 Entity Framework 7 Core 编写一个使用行级安全性的多租户应用程序 由于我的数据库托管在 Microsoft SQL Server 上 因此我使用了this https msdn
  • Facebook 点赞按钮点赞错误的网址

    如果我尝试制作一个 facebook like 按钮来喜欢以下网址 http go style co uk nggallery page 7029 image 35 该按钮喜欢以下网址 http go style co uk test ga
  • 如何以编程方式创建证书签名请求 (CSR)?

    如何用C实现呢 openssl req new key cert key out cert csr openssl x509 req in cert csr CA rootCA crt CAkey rootCA key CAcreatese
  • Monolog Logger 在每个日志消息的末尾输出空数组

    我的记录器对象在每行末尾输出空数组 例如 2017 08 17 12 26 02 import log INFO checkForDuplicates is processing 2017 08 17 12 26 04 import log
  • 如何使用 JavaFX 中的 JCSG 库将 MeshView 转换为 CSG 对象

    我正在使用 JavaFX 的 JCSG 库 我有一些MeshView我想将它们转换成的对象CSG对象 有办法实现吗 最简单的方法是组合javafx scene shape Mesh对象与 CSG 对象 前提是您有TriangleMesh正在
  • BlackBerry - 带居中位图的 ButtonField

    我有一个从 ButtonField 扩展的类 class BitmapButtonField extends ButtonField private Bitmap bitmap private int buttonWidth private
  • XML 序列化基类列表

    我有课A从类继承B 我有一个班级名单B其中包含A and B items List b myList new List b myList Add new A 当我尝试使用序列化此列表时XmlSerializable 抛出异常 如果我将列表定
  • Doctrine/Symfony 如何使用数组中的特定数据更新实体

    我环顾四周太久了 但没有运气 我的情况是 我有一个有点大的表 60 列 在 Doctrine Entity 中表示 在 FosREST 上工作 我想要实现的是 我想发送带有特定数据的 JSON 例如 phone gt new phone n
  • 一项活动中有多个 YouTube 玩家

    我正在使用 Youtube Android Player API 如下所述 https developers google com youtube android player https developers google com you
  • 基于现有数据库表创建@TableVariable?

    我想在存储过程中使用表变量 但这是一个问题 我的表非常大 声明表变量也需要很长的代码来编写和调试 请告诉我一些快速声明表变量的方法 是否可以基于现有表创建表变量 或者请分享任何创建用于创建表变量的代码的提示 Thanks 右键单击表格 选择
  • Java 8 Streams - 按层次结构对嵌套列表进行排序

    给出以下示例 我想要一个对列表和嵌套列表进行排序的流函数 class Foo public int sort public List
  • 如何在onSaveInstanceState中使用变量[重复]

    这个问题在这里已经有答案了 我刚刚开始在 android 上学习编程 并且在使用变量时遇到问题onSaveInstanceState 这是我的代码 int resultCode Override public void onCreate B
  • Python:代码统计

    你知道是否有一个可以生成代码统计信息的 Python 库吗 我正在考虑指向一个包并获取类 函数 方法 文档块行等的数量 它最终可能会包含无用的东西 例如 lambda 的数量或其他疯狂的统计数据 只是为了好玩 人们通常不会用十几两行代码就能
  • 将最后一行除以组的第一行

    我有一个如下所示的数据框 ID Quantity Time 54 100 2020 01 01 00 00 05 54 87 2020 01 01 00 00 06 58 400 2020 01 01 00 00 08 58 390 202