Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何连接列时间值在一定范围内且不是datetime或timestamp对象的两个数据帧?

如何连接列时间值在一定范围内且不是datetime或timestamp对象的两个数据帧?
EN

Stack Overflow用户
提问于 2019-07-16 21:14:16
回答 4查看 159关注 0票数 3

我有两个数据帧,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     time browncarbon blackcarbon
 181.7335    0.105270         NaN
 181.3809    0.166545    0.001217
 181.6197    0.071581         NaN

 422 rows x 3 columns

   start       end    toc 
179.9989  180.0002  155.0
180.0002  180.0016  152.0
180.0016  180.0030  151.0

1364 rows x 3 columns

第一个dataframe有一个时间列,每四分钟有一次瞬间。第二个数据帧具有每两分钟间隔的两个时间列。这两个时间列不是同时开始和结束的。但是,它们包含在同一天收集的数据。我如何创建包含以下内容的另一个数据帧:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
time browncarbon blackcarbon toc

422 rows X 4 columns

关于Stack Overflow有一个相关的答案,但是,只有当time列是datetime或timestamp对象时才适用。链接是:How to join two dataframes for which column values are within a certain range?

附录1:封装到时间行之一中的多个开始行和结束行也应该对应于一个toc行,就像它现在所做的那样,然而,它应该是多个toc行的平均值,这不是目前的情况。

附录2:Merging two pandas dataframes with complex conditions

EN

回答 4

Stack Overflow用户

发布于 2019-07-16 21:34:13

我们创建一个人工键列来执行outer merge,以获取笛卡尔乘积(行之间的所有匹配)。然后,我们使用.query过滤时间在该范围内的所有行。

注意:__:我编辑了一行的值,这样我们就可以得到匹配(参见底部的示例数据帧中的第0行)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df1.assign(key=1).merge(df2.assign(key=1), on='key', how='outer')\
   .query('(time >= start) & (time <= end)')\
   .drop(['key', 'start', 'end'], axis=1)

输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       time  browncarbon  blackcarbon    toc
1  180.0008      0.10527          NaN  152.0

使用的示例数据帧:

df1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       time  browncarbon  blackcarbon
0  180.0008     0.105270          NaN
1  181.3809     0.166545     0.001217
2  181.6197     0.071581          NaN

df2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
      start       end    toc
0  179.9989  180.0002  155.0
1  180.0002  180.0016  152.0
2  180.0016  180.0030  151.0
票数 1
EN

Stack Overflow用户

发布于 2019-07-16 21:37:59

由于开始和结束间隔是互斥的,因此我们可以在df2中创建新列,使其包含floor( start )和floor( end )范围内的所有整数值。稍后,在df1中添加另一列作为floor(time),然后在df1和df2上进行左外部连接。我认为这是应该做的,但如果需要,您可能必须删除NaN值和额外的列。如果您将csv文件发送给我,我也许可以将脚本发送给您。我希望我已经回答了你的问题。

票数 0
EN

Stack Overflow用户

发布于 2019-07-16 21:45:31

您的第二个数据帧太短,因此它不会反映有意义的合并。所以我对它做了一些修改:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df2 = pd.DataFrame({'start': [179.9989, 180.0002, 180.0016, 181.3, 181.5, 181.7],
 'end': [180.0002, 180.0016, 180.003, 181.5, 185.7, 181.8],
 'toc': [155.0, 152.0, 151.0, 150.0, 149.0, 148.0]})

df1['Rank'] = np.arange(len(df1))

new_df = pd.merge_asof(df1.sort_values('time'), df2,
          left_on='time',
          right_on='start')

为您提供:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       time  browncarbon  blackcarbon  Rank  start    end    toc
0  181.3809     0.166545     0.001217     1  181.3  181.5  150.0
1  181.6197     0.071581          NaN     2  181.5  185.7  149.0
2  181.7335     0.105270          NaN     0  181.7  181.8  148.0

您可以在Rank上删除额外的列和sort_values。例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new_df.sort_values('Rank').drop(['Rank','start','end'], axis=1)

提供:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       time  browncarbon  blackcarbon    toc
2  181.7335     0.105270          NaN  148.0
0  181.3809     0.166545     0.001217  150.0
1  181.6197     0.071581          NaN  149.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57065538

复制
相关文章
AngularJS HTML DOM
ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性。
陈不成i
2021/07/23
8160
AngularJS系列(三)——过滤器(filder)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
4940
[angularjs] angularjs系列笔记(四)过滤器
过滤器可以使用一个管道字符(|)添加到表达式和指令中,这不就是模板函数吗 <body> <div ng-app="Home"> <div ng-controller="Index"> 格式化字符串为小写 {{myName()|lowercase}}。 格式化字符串为大写 {{myName()|uppercase}}。 格式化数字为货币格式 {{price|currency}}。
唯一Chat
2019/09/10
4830
【AngularJS】—— 9 自定义过滤器
AngularJS另一个特点就是提供了过滤器,可以通过操作UNIX下管道的方式,操作数据结果。   通过使用管道,可以便于双向的数据绑定中视图的展现。   过滤器在处理过程中,将数据变成新的格式,而且可以使用管道这种链式风格,还能接受附加的参数。   实现方式   下面看一下如何定义声明一个过滤器,首先依然是要创建我们自己的模块myAppModule var myAppModule = angular.module("myApp",[]);   接下来在模块的基础上,创建过滤器: myAppModul
用户1154259
2018/01/17
6460
【AngularJS】—— 9 自定义过滤器
AngularJS系列(七)——HTML DOM操作
ng-disabled 指令绑定应用程序数据"mySwitch" 到 HTML 的 disabled 属性。
逝兮诚
2019/10/30
5450
[angularjs] angularjs系列笔记(七)HTML DOM
AngularJs为HTML DOM元素的属性提供了绑定数据的指令 ng-disabled指令 ng-disabled指令直接绑定数据到HTML元素的disabled属性 ng-show指令 ng-show指令隐藏和显示一个HTML元素 ng-hide指令与ng-show相反 <div ng-app="Home"> <div ng-controller="ngDisabledTest"> 测试ng-disabled指令 <button ng-disa
唯一Chat
2019/09/10
3540
angularjs学习第二天笔记---过滤器
 您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/09/20
1.3K0
谷歌发布 AngularJS 1.0,允许扩展HTML语法
谷歌2012年06月15日发布了一个全新的Web模板——AngularJS 1.0。 谷歌称, AngularJS可以让你扩展HTML的语法,以便清晰、简洁地表示应用程序中的组件,并允许将标准的HTM
张善友
2018/01/29
1.4K0
谷歌发布 AngularJS 1.0,允许扩展HTML语法
angularjs学习第二天笔记---过滤器
 您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/08/30
1.3K0
angularjs学习第二天笔记---过滤器
前端MVC学习总结(二)——AngularJS验证、过滤器、指令
一、验证 angularJS中提供了许多的验证指令,可以轻松的实现验证,只需要在表单元素上添加相应的ng属性,常见的如下所示: <input Type="text" ng-model="" [name
张果
2018/01/04
15.4K0
前端MVC学习总结(二)——AngularJS验证、过滤器、指令
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
23.2K0
【AngularJS】 # AngularJS入门
angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/09/20
1.1K0
AngularJS处理和转换视图中数据的重要工具:过滤器
AngularJS 是一个功能强大的 JavaScript 前端框架,它提供了丰富的内置过滤器,用于处理和转换视图中的数据。过滤器是 AngularJS 的核心特性之一,它可以帮助我们在模板中对数据进行排序、过滤、格式化等操作,从而更好地满足用户需求。本文将详细介绍 AngularJS 过滤器的概念、特性和用法,并提供一些示例来帮助读者更好地理解和应用。
网络技术联盟站
2023/07/05
2000
angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/08/30
1.3K0
angularjs学习第三天笔记(过滤器第二篇---filter过滤器及其自定义过滤器)
【AngularJS】—— 1 初识AngularJs
怀着激动与忐忑的心情,开始了学习AngularJS的旅程,很久之前就听说了这个前端框架,但是由于自己一直没有从事相关的工作,因此也没有进行学习。这次正好学习AngularJS,直接复习一下前端的知识。目前这里还是弱点,慢慢深入的学习。   AngularJS是Google的优秀的前端框架,目前已经应用于多个产品。   通过w3cschool.cc的学习,简单的了解了下它的使用方法,但是对于原理还没有理解。   AngularJs相对于其他的框架来说,有一下的特性:   1 MVVM   2 模块化
用户1154259
2018/01/17
2.8K0
AngularJS入门心得3——HTML的左右手指令
  在《AngularJS入门心得1——directive和controller如何通信》我们提到“AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了。这里AngularJS就应运而生,弥补了HTML的天然缺陷,用于构件Web应用等。”   那么AngularJS如何弥补HTML的缺陷,指令可能是最好的回答。 指令是什么??? 指令就是一些附加在HTML元素上的自定义标记(可以是属性A、元素E、css类
JackieZheng
2018/01/16
3.2K0
AngularJS入门心得3——HTML的左右手指令
AngularJS 的 API:模块 API、指令 API、服务 API、过滤器 API、路由 API
AngularJS 是一款流行的前端 JavaScript 框架,提供了丰富的 API 接口,用于实现前端应用的各种功能。本文将详细介绍 AngularJS 的 API,包括模块 API、指令 API、服务 API、过滤器 API、路由 API 等内容,帮助开发者充分了解和熟练运用 AngularJS 的各项功能。
网络技术联盟站
2023/07/05
2970
AngularJS简介
AngularJS是一个JavaScript矿建,他是一个JavaSscript编写的库。可以通过<script>标签添加到HTML页面。
全栈程序员站长
2022/09/16
5K0
【AngularJS】—— 2 初识AngularJs(续)
前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容。   本篇根据w3cschool.cc继续学习AngularJS剩余的内容,包括:   1 事件   2 模块   3 表单   4 数据验证   5 bootstrap CSS风格   6 include包含其他页面   7 应用程序   8 参考手册   首先看一下html的事件   关于html的事件,文中给出了三个例子,点击、隐藏、显示。使用方法基本相同:   先看一下点击的例子,点击按钮后,会触发ng-clic
用户1154259
2018/01/17
2.2K0
AngularJS
scope:单个controller的作用域。可以直接在某controller下的页面引用scope下的变量 rootScope:多个controller作用域的桥梁。可以直接在全局页面引用rootScope下的变量
城市中的游牧民族
2019/02/21
1.4K0

相似问题

AngularJS过滤器返回的HTML错误

23

在HTML中使用AngularJS过滤器

42

AngularJS,附件html的内联过滤器

13

如何创建输出HTML的angularjs过滤器

31

在html属性中使用angularjs过滤器

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文