- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当 A 列的值在一周内最高时,如何将值 1 赋给变量 S?还有,当B的值是一周内的最小值时,如何将值2赋给变量S。我正在处理按日期时间索引的每小时数据。这是我的数据框的样子:
A B S
datetime
6/14/2004 1:00 384.5 383.6 0
6/14/2004 2:00 384.3 382.3 0
6/14/2004 3:00 383.3 382.3 0
6/14/2004 4:00 383.3 382.6 0
6/14/2004 5:00 383.3 382.8 0
6/14/2004 6:00 383.3 382.5 0
6/14/2004 7:00 383.3 382.3 0
6/14/2004 8:00 383.8 382.3 0
6/14/2004 9:00 382.8 382.1 0
6/14/2004 10:00 382.6 382.1 0
我曾尝试每周使用重采样并获得最大值,但我不知道如何对此进行编码,因为它比我最初想象的要复杂。这是我希望最终数据的样子。
A B S
datetime
6/14/2004 1:00 384.5 383.6 0
6/14/2004 2:00 384.3 382.3 0
6/14/2004 3:00 383.3 382.3 0
6/14/2004 4:00 383.3 382.6 0
6/14/2004 5:00 383.3 382.8 0
6/14/2004 6:00 383.3 382.5 0
6/14/2004 7:00 383.3 382.3 0
6/14/2004 8:00 383.8 382.3 0
6/14/2004 9:00 382.8 382.1 0
6/14/2004 10:00 382.6 382.1 0
6/14/2004 11:00 382.5 381.8 0
6/14/2004 12:00 382.8 382.3 0
6/14/2004 13:00 383.1 382.3 0
6/14/2004 14:00 385.8 382.5 0
6/14/2004 15:00 385.1 383.6 0
6/14/2004 16:00 384.8 383.5 0
6/14/2004 17:00 384.8 382.5 0
6/14/2004 18:00 383.6 382.8 0
6/14/2004 19:00 383.8 382.8 0
6/14/2004 20:00 383.3 382.8 0
6/14/2004 21:00 383.1 382.6 0
6/14/2004 22:00 383.1 382.6 0
6/14/2004 23:00 383.1 382.6 0
6/15/2004 0:00 382.8 382.6 0
6/15/2004 1:00 383.3 382.6 0
6/15/2004 2:00 383.6 382.3 0
6/15/2004 3:00 383.8 382.5 0
6/15/2004 4:00 382.8 382.1 0
6/15/2004 5:00 383.0 382.1 0
6/15/2004 6:00 382.8 382.0 0
... ... ... ...
6/24/2004 20:00 402.8 401.8 0
6/24/2004 21:00 402.3 401.8 0
6/24/2004 22:00 402.3 401.8 0
6/24/2004 23:00 402.1 401.1 0
6/25/2004 0:00 402.1 401.8 0
6/25/2004 1:00 402.1 401.3 0
6/25/2004 2:00 402.1 400.1 0
6/25/2004 3:00 401.6 400.8 0
6/25/2004 4:00 401.5 400.8 0
6/25/2004 5:00 401.3 400.8 0
6/25/2004 6:00 401.1 400.6 0
6/25/2004 7:00 402.1 400.8 0
6/25/2004 8:00 402.1 400.6 0
6/25/2004 9:00 401.6 400.5 0
6/25/2004 10:00 401.8 400.8 0
6/25/2004 11:00 401.5 400.6 0
6/25/2004 12:00 401.3 400.1 0
6/25/2004 13:00 402.8 401.3 0
6/25/2004 14:00 402.8 401.0 **1**
6/25/2004 15:00 401.5 400.1 0
6/25/2004 16:00 401.6 400.6 0
6/25/2004 17:00 401.8 401.0 0
6/25/2004 18:00 402.1 400.8 0
6/25/2004 19:00 402.3 400.8 0
6/25/2004 20:00 402.6 401.6 0
6/25/2004 21:00 401.8 401.3 0
6/25/2004 22:00 401.8 400.6 0
6/28/2004 0:00 401.8 401.6 0
6/28/2004 1:00 402.3 401.6 0
6/28/2004 2:00 402.3 401.5 0
对于第一周,S 列在 6/18/2004 18:00 中的值为 1,在 6/15/2004 11:00 中的值为 2对于第二周,列 S 在 6/25/2004 14:00 中的值为 1,在 6/21/2004 18:00
中的值为 2我想出了四个规则:
1. 当 A = max(A) 在当前周内,将值 1 放入 S。如果 A 最大值在一周内不唯一,则在最后一次出现时将 1 放入 S A 中的最大值。
2. 当 B = min(B) 在当前周内,将值 2 放入 S。如果 B 的最小值在该周内不唯一,则在最后一次出现时将 2 放入 S B 中的最小值。
3. 在所有周内重复此操作。整个数据集每小时可能有 80k+ 数据行。
4. 在每周内:如果 max(A) 和 min(B) 出现在相同的日期时间索引处,则在 S 中保留值 0(不变)。
读取数据的代码如下:
import pandas as pd
url = 'https://www.dropbox.com/s/x7wl75rkzsqgkoj/dataset.csv?dl=1'
p = pd.read_csv(url)
p.set_index('datetime', drop=True, inplace=True)
p
这是一张图片,解释了我希望输出的样子:
最佳答案
所以我减小了数据框的大小,以便我们可以看到一些东西,并且我添加了一个列 week ("w"),以便我们可以更好地检查。
首先,您需要将索引的类型设置为 datetime 对象,以便您可以访问日期属性,例如 week 到 groupby on。
p.index = pd.to_datetime(p.index)
p["w"] = p.index.week
p
A B S w
datetime
2004-06-14 01:00:00 384.5 383.6 0 25
2004-06-14 09:00:00 382.8 382.1 0 25
2004-06-14 17:00:00 384.8 382.5 0 25
2004-06-15 01:00:00 383.3 382.6 0 25
2004-06-15 09:00:00 382.3 381.6 0 25
2004-06-15 17:00:00 388.6 384.6 0 25
2004-06-16 01:00:00 387.3 387.1 0 25
2004-06-16 09:00:00 388.8 387.6 0 25
2004-06-16 17:00:00 384.5 382.6 0 25
2004-06-17 01:00:00 384.6 383.6 0 25
2004-06-17 09:00:00 385.6 384.0 0 25
2004-06-17 17:00:00 386.8 386.0 0 25
2004-06-18 01:00:00 388.6 387.3 0 25
2004-06-18 09:00:00 387.5 385.8 0 25
2004-06-18 17:00:00 395.8 394.1 0 25
2004-06-21 02:00:00 394.3 392.8 0 26
2004-06-21 10:00:00 393.3 392.3 0 26
2004-06-21 18:00:00 394.8 392.1 0 26
2004-06-22 02:00:00 394.6 393.0 0 26
2004-06-22 10:00:00 394.0 392.6 0 26
2004-06-22 18:00:00 395.3 393.8 0 26
2004-06-23 02:00:00 394.3 393.6 0 26
2004-06-23 10:00:00 395.8 395.0 0 26
2004-06-23 18:00:00 394.6 393.6 0 26
2004-06-24 02:00:00 394.6 393.1 0 26
2004-06-24 10:00:00 397.8 394.8 0 26
2004-06-24 18:00:00 401.3 400.6 0 26
2004-06-25 02:00:00 402.1 400.1 0 26
2004-06-25 10:00:00 401.8 400.8 0 26
2004-06-25 18:00:00 402.1 400.8 0 26
2004-06-28 03:00:00 402.3 401.5 0 27
2004-06-28 11:00:00 402.1 400.8 0 27
2004-06-28 19:00:00 400.3 399.1 0 27
2004-06-29 03:00:00 399.6 399.1 0 27
2004-06-29 11:00:00 397.1 395.3 0 27
2004-06-29 19:00:00 392.3 391.0 0 27
2004-06-30 03:00:00 392.3 391.8 0 27
2004-06-30 11:00:00 393.6 393.1 0 27
2004-06-30 19:00:00 393.5 391.3 0 27
然后,您需要定义每周应用的函数:
def minmax(grp):
Amax = grp.A[::-1].idxmax() # reverse your Series since you want the last occurence, and idxmax return the first in case of tie
grp.loc[Amax, "S"] = 1
Bmin = grp.B[::-1].idxmin()
if Bmin != Amax:
grp.loc[Bmin, "S"] = 2
else:
grp.loc[Bmin, "S"] = 0 # no change
return grp
然后每年每周分组并应用函数:
p.groupby([p.index.week, p.index.year]).apply(minmax)
A B S w
datetime
2004-06-14 01:00:00 384.5 383.6 0 25
2004-06-14 09:00:00 382.8 382.1 0 25
2004-06-14 17:00:00 384.8 382.5 0 25
2004-06-15 01:00:00 383.3 382.6 0 25
2004-06-15 09:00:00 382.3 381.6 2 25
2004-06-15 17:00:00 388.6 384.6 0 25
2004-06-16 01:00:00 387.3 387.1 0 25
2004-06-16 09:00:00 388.8 387.6 0 25
2004-06-16 17:00:00 384.5 382.6 0 25
2004-06-17 01:00:00 384.6 383.6 0 25
2004-06-17 09:00:00 385.6 384.0 0 25
2004-06-17 17:00:00 386.8 386.0 0 25
2004-06-18 01:00:00 388.6 387.3 0 25
2004-06-18 09:00:00 387.5 385.8 0 25
2004-06-18 17:00:00 395.8 394.1 1 25
2004-06-21 02:00:00 394.3 392.8 0 26
2004-06-21 10:00:00 393.3 392.3 0 26
2004-06-21 18:00:00 394.8 392.1 2 26
2004-06-22 02:00:00 394.6 393.0 0 26
2004-06-22 10:00:00 394.0 392.6 0 26
2004-06-22 18:00:00 395.3 393.8 0 26
2004-06-23 02:00:00 394.3 393.6 0 26
2004-06-23 10:00:00 395.8 395.0 0 26
2004-06-23 18:00:00 394.6 393.6 0 26
2004-06-24 02:00:00 394.6 393.1 0 26
2004-06-24 10:00:00 397.8 394.8 0 26
2004-06-24 18:00:00 401.3 400.6 0 26
2004-06-25 02:00:00 402.1 400.1 0 26
2004-06-25 10:00:00 401.8 400.8 0 26
2004-06-25 18:00:00 402.1 400.8 1 26
2004-06-28 03:00:00 402.3 401.5 1 27
2004-06-28 11:00:00 402.1 400.8 0 27
2004-06-28 19:00:00 400.3 399.1 0 27
2004-06-29 03:00:00 399.6 399.1 0 27
2004-06-29 11:00:00 397.1 395.3 0 27
2004-06-29 19:00:00 392.3 391.0 2 27
2004-06-30 03:00:00 392.3 391.8 0 27
2004-06-30 11:00:00 393.6 393.1 0 27
2004-06-30 19:00:00 393.5 391.3 0 27
HTH
关于python - 创建一个新变量,它是 python 中另一个变量的每周最小/最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53743553/
我想知道有没有可能做 new PrintWriter(new BufferedWriter(new PrintWriter(s.getOutputStream, true))) 在 Java 中,s
我正在尝试使用 ConcurrentHashMap 初始化 ConcurrentHashMap private final ConcurrentHashMap > myMulitiConcurrent
我只是想知道两个不同的新对象初始化器之间是否有任何区别,还是仅仅是语法糖。 因此: Dim _StreamReader as New Streamreader(mystream) 与以下内容不同: D
在 C++ 中,以下两种动态对象创建之间的确切区别是什么: A* pA = new A; A* pA = new A(); 我做了一些测试,但似乎在这两种情况下,都调用了默认构造函数,并且只调用了它。
我已经阅读了其他帖子,但它们没有解决我的问题。环境为VB 2008(2.0 Framework)下面的代码在 xslt.Load 行导致 XSLT 编译错误下面是错误的输出。我将 XSLT 作为字符串
我想知道为什么alert(new Boolean(false))打印 false 而不是打印对象,因为 new Boolean 应该返回对象。如果我使用 console.log(new Boolean
原文首发在我的博客:https://blog.liuzijian.com/post/86955c3b-9635-47a0-890c-f1219a27c269.html 1.Lambda表达式
本文实例讲述了Python装饰器用法。分享给大家供大家参考,具体如下: 写装饰器 装饰器只不过是一种函数,接收被装饰的可调用对象作为它的唯一参数,然后返回一个可调用对象(就像前面的简单例子) 注
我可以编写 YAML header 来使用 knit 为 R Markdown 文件生成多种输出格式吗?我无法重现 the original question with this title 的答案中
我可以编写一个YAML标头以使用knitr为R Markdown文件生成多种输出格式吗?我无法重现the original question with this title答案中描述的功能。 这个降价
我正在使用vars package可视化脉冲响应。示例: library(vars) Canada % names ir % `$`(irf) %>% `[[`(variables[e])) %>%
我有一个容器类,它有一个通用参数,该参数被限制到某个基类。提供给泛型的类型是基类约束的子类。子类使用方法隐藏(新)来更改基类方法的行为(不,我不能将其设为虚拟,因为它不是我的代码)。我的问题是"new
Java 在提示! cannot find symbol symbol : constructor Bar() location: class Bar JPanel panel =
在我的应用程序中,一个新的 Activity 从触摸按钮(而不是点击)开始,而且我没有抬起手指并希望在新的 Activity 中跟踪触摸的 Action 。第二个 Activity 中的触摸监听器不响
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
和我的last question ,我的程序无法检测到一个短语并将其与第一行以外的任何行匹配。但是,我已经解决并回答了。但现在我需要一个新的 def函数,它删除某个(给定 refName )联系人及其
这个问题在这里已经有了答案: Horizontal list items (7 个答案) 关闭 9 年前。
我想创建一个新的 float 类型,大小为 128 位,指数为 4 字节(32 位),小数为 12 字节(96 位),我该怎么做输入 C++,我将能够在其中进行输入、输出、+、-、*、/操作。 [我正
我在放置引用计数指针的实例时遇到问题 类到我的数组类中。使用调试器,似乎永远不会调用构造函数(这会扰乱引用计数并导致行中出现段错误)! 我的 push_back 函数是: void push_back
我在我们的代码库中发现了经典的新建/删除不匹配错误,如下所示: char *foo = new char[10]; // do something delete foo; // instead of
我是一名优秀的程序员,十分优秀!