首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在熊猫身上寻找价值重复的时间

在熊猫身上寻找价值重复的时间
EN

Stack Overflow用户
提问于 2018-11-23 13:59:49
回答 1查看 67关注 0票数 0

我有一个包含两列的温度数据框架(Temp):

  • 时间
  • 温度

我还有另一个数据帧(Activated),其中有一列描述了某些设备激活的时间:

  • 时间

这两个数据帧都是在同一时期内的,每个"TimeStamp“都存在于这两个数据帧中。

我想知道,在Activated数据帧中的每一次,它经过多长时间,直到温度上升。

我知道如何做到"C样式“,有两个for循环(在Activated上一个迭代找到Temp中的时间,然后循环直到找到更高的温度)。

但我相信,有一种更清洁、更有效的方法来使用熊猫。示例数据:

Temp

代码语言:javascript
运行
复制
1 25.6
2 25.4
3 24
4 25.8
5 23.2
6 24.3
7 28.1

Activated

代码语言:javascript
运行
复制
2
4

对于Activated中的第一行,时间是2 --时间中的温度225.4,结果应该是2,因为只有时间4才会上升。对于Activated中的第二行,时间是4 --时间中的温度425.8,结果应该是3,因为只有时间7才会上升。

2的输出为2,4为3

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-23 14:24:59

这是一个部分矢量化的解决方案。注意,pd.Series.apply只是一个Python级别的循环。

代码语言:javascript
运行
复制
temp = pd.DataFrame({'Time': list(range(1, 8)),
                     'Temperature': [25.6, 25.4, 24, 25.8, 23.2, 24.3, 28.1]})

activated = pd.DataFrame({'Time': [2, 4]})

def time_until_higher(x):
    current_temp = temp_s.at[x]
    diffs = temp_s[temp_s.index > x] - current_temp
    return (diffs < 0).values.argmin() + 1

temp_s = temp.set_index('Time')['Temperature']  # assume times are sorted
activated['Next'] = activated['Time'].apply(time_until_higher)

print(activated)

   Time  Next
0     2     2
1     4     3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53448075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档