Groupby、移位和前向填充

2024-01-02

我有这个 df:

ID         Date   Time       Lat       Lon
 A  07/16/2019   08:00  29.39291 -98.50925
 A  07/16/2019   09:00  29.39923 -98.51256
 A  07/16/2019   10:00  29.40147 -98.51123
 A  07/18/2019   08:30  29.38752 -98.52372
 A  07/18/2019   09:30  29.39291 -98.50925
 B  07/16/2019   08:00  29.39537 -98.50402
 B  07/18/2019   11:00  29.39343 -98.49707
 B  07/18/2019   12:00  29.39291 -98.50925
 B  07/19/2019   10:00  29.39556 -98.53148

我想对 df 进行分组ID and Date,将行向后移动一步,并向前填充 NaN 值。

Note: (ID, Date)只有一行,应由行本身填充。

例如:B 07/16/2019 08:00 29.39537 -98.50402

预期结果:

ID         Date   Time       Lat       Lon Time.1     Lat.1     Lon.1
 A  07/16/2019   08:00  29.39291 -98.50925  09:00  29.39923 -98.51256
 A  07/16/2019   09:00  29.39923 -98.51256  10:00  29.40147 -98.51123
 A  07/16/2019   10:00  29.40147 -98.51123  10:00  29.40147 -98.51123
 A  07/18/2019   08:30  29.38752 -98.52372  09:30  29.39291 -98.50925
 A  07/18/2019   09:30  29.39291 -98.50925  09:30  29.39291 -98.50925
 B  07/16/2019   08:00  29.39537 -98.50402  08:00  29.39537 -98.50402
 B  07/18/2019   11:00  29.39343 -98.49707  12:00  29.39291 -98.50925
 B  07/18/2019   12:00  29.39291 -98.50925  12:00  29.39291 -98.50925
 B  07/19/2019   10:00  29.39556 -98.53148  10:00  29.39556 -98.53148

我正在使用的代码(不符合预期结果):

pd.concat([df, df.groupby(['ID','Date']).shift(-1).ffill()], axis=1)

如果原始数据中没有缺失值的解决方案 - 首先用原始值替换具有一个元素组的行,然后向前填充缺失值:

m = ~df.duplicated(['ID','Date']) & ~df.duplicated(['ID','Date'], keep=False)
df1 = df.groupby(['ID','Date']).shift(-1).mask(m, df).ffill()
df = pd.concat([df, df1.add_suffix('.1')], axis=1)
print (df)
  ID        Date   Time       Lat       Lon Time.1     Lat.1     Lon.1
0  A  07/16/2019  08:00  29.39291 -98.50925  09:00  29.39923 -98.51256
1  A  07/16/2019  09:00  29.39923 -98.51256  10:00  29.40147 -98.51123
2  A  07/16/2019  10:00  29.40147 -98.51123  10:00  29.40147 -98.51123
3  A  07/18/2019  08:30  29.38752 -98.52372  09:30  29.39291 -98.50925
4  A  07/18/2019  09:30  29.39291 -98.50925  09:30  29.39291 -98.50925
5  B  07/16/2019  08:00  29.39537 -98.50402  08:00  29.39537 -98.50402
6  B  07/18/2019  11:00  29.39343 -98.49707  12:00  29.39291 -98.50925
7  B  07/18/2019  12:00  29.39291 -98.50925  12:00  29.39291 -98.50925
8  B  07/19/2019  10:00  29.39556 -98.53148  10:00  29.39556 -98.53148

如果不需要自定义函数则加倍groupby是必要的,因为每组都需要前向填充:

df1 = df.groupby(['ID','Date']).shift(-1).groupby([df['ID'],df['Date']]).ffill().fillna(df)
df = pd.concat([df, df1.add_suffix('.1')], axis=1)
print (df)
  ID        Date   Time       Lat       Lon Time.1     Lat.1     Lon.1
0  A  07/16/2019  08:00  29.39291 -98.50925  09:00  29.39923 -98.51256
1  A  07/16/2019  09:00  29.39923 -98.51256  10:00  29.40147 -98.51123
2  A  07/16/2019  10:00  29.40147 -98.51123  10:00  29.40147 -98.51123
3  A  07/18/2019  08:30  29.38752 -98.52372  09:30  29.39291 -98.50925
4  A  07/18/2019  09:30  29.39291 -98.50925  09:30  29.39291 -98.50925
5  B  07/16/2019  08:00  29.39537 -98.50402  08:00  29.39537 -98.50402
6  B  07/18/2019  11:00  29.39343 -98.49707  12:00  29.39291 -98.50925
7  B  07/18/2019  12:00  29.39291 -98.50925  12:00  29.39291 -98.50925
8  B  07/19/2019  10:00  29.39556 -98.53148  10:00  29.39556 -98.53148

使用 lambda 函数应该是这样的解决方案:

c = ['Time','Lat','Lon']
df1 = df.groupby(['ID','Date'])[c].apply(lambda x: x.shift(-1).ffill()).fillna(df)
df = pd.concat([df, df1.add_suffix('.1')], axis=1)
print (df)
  ID        Date   Time       Lat       Lon Time.1     Lat.1     Lon.1
0  A  07/16/2019  08:00  29.39291 -98.50925  09:00  29.39923 -98.51256
1  A  07/16/2019  09:00  29.39923 -98.51256  10:00  29.40147 -98.51123
2  A  07/16/2019  10:00  29.40147 -98.51123  10:00  29.40147 -98.51123
3  A  07/18/2019  08:30  29.38752 -98.52372  09:30  29.39291 -98.50925
4  A  07/18/2019  09:30  29.39291 -98.50925  09:30  29.39291 -98.50925
5  B  07/16/2019  08:00  29.39537 -98.50402  08:00  29.39537 -98.50402
6  B  07/18/2019  11:00  29.39343 -98.49707  12:00  29.39291 -98.50925
7  B  07/18/2019  12:00  29.39291 -98.50925  12:00  29.39291 -98.50925
8  B  07/19/2019  10:00  29.39556 -98.53148  10:00  29.39556 -98.53148
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Groupby、移位和前向填充 的相关文章

  • 如何使用 Plotly 中的直方图将所有离群值分入一个分箱?

    所以问题是 我可以在 Plotly 中绘制直方图 其中所有大于某个阈值的值都将被分组到一个箱中吗 所需的输出 但使用标准情节Histogram类我只能得到这个输出 import pandas as pd from plotly import
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 通过列表理解压平列表列表

    我正在尝试使用 python 中的列表理解来展平列表 我的清单有点像 1 2 3 4 5 6 7 8 只是为了打印这个列表列表中的单个项目 我编写了这个函数 def flat listoflist for item in listoflis
  • if 语句未命中中的 continue 断点

    在下面的代码中 两者a and b是生成器函数的输出 并且可以评估为None或者有一个值 def testBehaviour self a None b 5 while True if not a or not b continue pri
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 以同步方式使用 FastAPI,如何获取 POST 请求的原始正文?

    在中使用 FastAPIsync not async模式 我希望能够接收 POST 请求的原始 未更改的正文 我能找到的所有例子都显示async代码 当我以正常同步方式尝试时 request body 显示为协程对象 当我通过发布一些内容来
  • TensorFlow的./configure在哪里以及如何启用GPU支持?

    在我的 Ubuntu 上安装 TensorFlow 时 我想将 GPU 与 CUDA 结合使用 但我却停在了这一步官方教程 http www tensorflow org get started os setup md 这到底是哪里 con
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • 在 pytube3 中获取 youtube 视频的标题?

    我正在尝试构建一个应用程序来使用 python 下载 YouTube 视频pytube3 但我无法检索视频的标题 这是我的代码 from pytube import YouTube yt YouTube link print yt titl
  • 将 2D NumPy 数组按元素相乘并求和

    我想知道是否有一种更快的方法 专用 NumPy 函数来执行 2D NumPy 数组的元素乘法 然后对所有元素求和 我目前使用np sum np multiply A B 其中 A B 是相同维度的 NumPy 数组m x n 您可以使用np
  • 在 Pandas 中使用正则表达式的多种模式

    我是Python编程的初学者 我正在探索正则表达式 我正在尝试从 描述 列中提取一个单词 数据库名称 我无法给出多个正则表达式模式 请参阅下面的描述和代码 描述 Summary AD1 Low free DATA space in data
  • Python 将日志滚动到变量

    我有一个使用多线程并在服务器后台运行的应用程序 为了无需登录服务器即可监控应用程序 我决定包括Bottle http bottlepy org为了响应一些HTTP端点并报告状态 执行远程关闭等 我还想添加一种查阅日志文件的方法 我可以使用以
  • python Soap zeep模块获取结果

    我从 SOAP API 得到如下结果 client zeep Client wsdl self wsdl transport transport auth header lb E authenticate self login res cl
  • Ubuntu 上的 Python 2.7

    我是 Python 新手 正在 Linux 机器 Ubuntu 10 10 上工作 它正在运行 python 2 6 但我想运行 2 7 因为它有我想使用的功能 有人敦促我不要安装 2 7 并将其设置为我的默认 python 我的问题是 如
  • 从 Twitter API 2.0 获取 user.fields 时出现问题

    我想从 Twitter API 2 0 端点加载推文 并尝试获取标准字段 作者 文本 和一些扩展字段 尤其是 用户 字段 端点和参数的定义工作没有错误 在生成的 json 中 我只找到标准字段 但没有找到所需的 user fields 用户
  • 列表值的意外更改

    这是我的课 class variable object def init self name name alias parents values table name of the variable self name 这是有问题的函数 f

随机推荐

  • ExtJS 图表的性能比 FusionCharts 更好吗?

    我们正在考虑在应用程序中用 ExtJS 图表替换 FusionCharts 因为 我们已经在整个 UI 中使用了 ExtJS 如果能够消除另一个商业第三方依赖项和 API 的开销和费用 那就太好了 我们希望能够在无 Flash 的移动设备上
  • 如何在 Ruby on Rails 中覆盖 Materialise CSS?

    我一直在互联网上浏览一些关于 Rails 中的 Materialise 的帖子 但是这个领域似乎非常模糊 我目前正在使用 Materialize sass gem 我没有找到很多有用的帖子 我决定来这里 这是我的页面代码pages disc
  • ggplot2 在箱线图顶部添加文本

    我有一个正在绘制的数据ggplot2作为箱线图 看起来像 gt head varf sID variable value 1 SP SA036 SA040 CM0001 0 492537313 2 SP SA036 SA040 CM0001
  • jQuery 加载动态元素

    我正在尝试对动态添加到页面上某些容器的元素进行一些条件操作 但我错过了一个事件 假设我有一个容器 div div 我可以轻松地将事件处理程序绑定到所有新元素的单击函数 使用 container on click sub element fu
  • Siri 无法在现有项目中运行

    我必须使用 Siri 通过我的应用程序发起 VoIP 呼叫 它在演示项目中工作 但当我将意图扩展添加到现有项目中时 Siri 不再工作 在系统设置中 我的应用程序未显示在应用程序支持部分中 Plist配置如下 另请参阅扩展的 plist 配
  • hashmap的负载因子和容量

    如何找到hashmap当前的负载因子和容量 Map m new HashMap 10 1 but after lots of works Here how to get current values 您不应该能够获得负载系数和容量 它们是
  • 为什么Java的“受保护”比默认的受保护要少? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何禁用 React Material UI 自动完成表单中的 ENTER 键

    我在 React 组件中有一个 Material UI 自动完成表单 它工作完美 除了 ENTER 键当前正在清除输入字段 我只是想要输入字段not当用户按 ENTER 键时被清除 我搜索了 Stackoverflow 上的所有类似问题 没
  • 返回最新“条纹”数据的行

    给出一个包含以下数据的简单表格 id result played 7 L 2012 01 07 6 L 2012 01 06 5 L 2012 01 05 4 W 2012 01 04 3 W 2012 01 03 2 L 2012 01
  • scipy.integrate.solve_ivp 不清楚如何求解形式 0=F(t, y(t), y'(t)) 的隐式 ODE

    目前 我确实使用assimulos 求解器套件 https jmodelica org assimulo tutorial imp html求解 0 F t y t y t 形式的隐式微分方程 我想使用本机 scipy 安装附带的求解器 并
  • Android页面卷曲动画

    有没有简单的方法来做Curl翻页动画 卷曲动画是页面翻转的动画 包括上面的页面滚动和下面的页面阴影 一次显示两页的 画廊 就像一本书一样 的推荐方法是什么 Is it 让适配器一次显示两个图像的线性布局 它不会让我像书一样显示一页翻过另一页
  • 为什么 echo 不返回与没有 echo 相同的结果

    我有以下案例 regex OK space alnum alnum text OK AAA BBBBBB aaabbbcccdddfffed asdadadadadadsada OK CCC KKKKKKK some text here O
  • C# 刷新 StreamWriter 和 MemoryStream

    我使用以下代码片段 我不确定是否需要调用Flush方法 一旦StreamWriter 一旦开启MemoryStream converts an xsd object to the corresponding xml string using
  • 如何在 Perl 中运行子命令正确导入环境?

    在从子命令导入环境时 我想将从 bash 脚本导出的所有环境变量添加到哈希中 什么时候program运行后 它将设置一些变量并导出它们 我想将这些变量保存在 Perl 脚本中供以后使用 但是我不想采用子命令中定义的 bash 函数 目前 我
  • 如何从 Java 获取 JanusGraphManagement

    我无法理解如何从使用ConfiguredGraphFactory 创建的图表中获取JanusGraphManagement 实例 我尝试做这样的事情 JanusGraphFactory Builder config JanusGraphFa
  • 更新 Popup.Animated 以播放 gif 直到外部任务完成 (PYSimpleGUI)

    我希望创建一个 UI 在执行另一项任务时显示动画弹出窗口 完成后将退出 我正在使用 PYSimpleGUI 并使用列出的示例here https github com PySimpleGUI PySimpleGUI blob master
  • 自定义注释不适用于 spring Bean

    我创建了新的自定义注释 MyCustomAnnotation Target ElementType METHOD ElementType TYPE ElementType FIELD Retention RUNTIME public int
  • com4j 与 jacob 从 Java 调用 COM 方法

    我维护一个遗留的 Java 应用程序 它使用Jacob http danadler com jacob 或Java COM Bridge 通过MS VBA和MS Word的COM接口进行调用 我一直在看com4j https com4j d
  • 实体框架中内容的国际化

    我不断遇到 i18n 要求 其中我的数据 而不是 UI 需要国际化 public class FooEntity public long Id get set public string Code get set Some values m
  • Groupby、移位和前向填充

    我有这个 df ID Date Time Lat Lon A 07 16 2019 08 00 29 39291 98 50925 A 07 16 2019 09 00 29 39923 98 51256 A 07 16 2019 10 0