- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
更新:从版本 0.20.0 开始,pandas cut/qcut 确实可以处理日期字段。参见 What's New了解更多。
pd.cut and pd.qcut now support datetime64 and timedelta64 dtypes (GH14714, GH14798)
原始问题:Pandas cut 和 qcut 函数非常适合“分桶”连续数据以用于数据透视表等,但我看不到在混合。令人沮丧,因为 pandas 在所有与时间相关的事情上都非常出色!
这是一个简单的例子:
def randomDates(size, start=134e7, end=137e7):
return np.array(np.random.randint(start, end, size), dtype='datetime64[s]')
df = pd.DataFrame({'ship' : randomDates(10), 'recd' : randomDates(10),
'qty' : np.random.randint(0,10,10), 'price' : 100*np.random.random(10)})
df
price qty recd ship
0 14.723510 3 2012-11-30 19:32:27 2013-03-08 23:10:12
1 53.535143 2 2012-07-25 14:26:45 2012-10-01 11:06:39
2 85.278743 7 2012-12-07 22:24:20 2013-02-26 10:23:20
3 35.940935 8 2013-04-18 13:49:43 2013-03-29 21:19:26
4 54.218896 8 2013-01-03 09:00:15 2012-08-08 12:50:41
5 61.404931 9 2013-02-10 19:36:54 2013-02-23 13:14:42
6 28.917693 1 2012-12-13 02:56:40 2012-09-08 21:14:45
7 88.440408 8 2013-04-04 22:54:55 2012-07-31 18:11:35
8 77.329931 7 2012-11-23 00:49:26 2012-12-09 19:27:40
9 46.540859 5 2013-03-13 11:37:59 2013-03-17 20:09:09
要按价格或数量分组,我可以使用 cut/qcut 对它们进行分桶:
df.groupby([pd.cut(df['qty'], bins=[0,1,5,10]), pd.qcut(df['price'],q=3)]).count()
price qty recd ship
qty price
(0, 1] [14.724, 46.541] 1 1 1 1
(1, 5] [14.724, 46.541] 2 2 2 2
(46.541, 61.405] 1 1 1 1
(5, 10] [14.724, 46.541] 1 1 1 1
(46.541, 61.405] 2 2 2 2
(61.405, 88.44] 3 3 3 3
但我看不到任何简单的方法可以对我的“记录”或“发货”日期字段执行相同的操作。例如,生成一个类似的计数表,按(比如说)每月的 recd 和 ship 桶分割。似乎 resample() 拥有所有的机制来分阶段,但我不知道如何在这里应用它。 'date cut' 中的桶(或级别)相当于 pandas.PeriodIndex,然后我想用 df['recd'] 的每个值标记它落入的时间段?
所以我正在寻找的输出类型类似于:
ship recv count
2011-01 2011-01 1
2011-02 3
... ...
2011-02 2011-01 2
2011-02 6
... ... ...
更一般地说,我希望能够在输出中混合和匹配连续变量或分类变量。假设 df 还包含一个带有红色/黄色/绿色值的“状态”列,那么也许我想按状态、价格桶、发货和记录桶汇总计数,所以:
ship recv price status count
2011-01 2011-01 [0-10) green 1
red 4
[10-20) yellow 2
... ... ...
2011-02 [0-10) yellow 3
... ... ... ...
作为奖励问题,修改上面的 groupby() 结果以仅包含一个名为“count”的输出列的最简单方法是什么?
最佳答案
这是一个使用 pandas.PeriodIndex 的解决方案(警告:PeriodIndex 不似乎支持倍数 > 1 的时间规则,例如“4M”)。我认为奖励问题的答案是 .size()
。
In [49]: df.groupby([pd.PeriodIndex(df.recd, freq='Q'),
....: pd.PeriodIndex(df.ship, freq='Q'),
....: pd.cut(df['qty'], bins=[0,5,10]),
....: pd.qcut(df['price'],q=2),
....: ]).size()
Out[49]:
qty price
2012Q2 2013Q1 (0, 5] [2, 5] 1
2012Q3 2013Q1 (5, 10] [2, 5] 1
2012Q4 2012Q3 (5, 10] [2, 5] 1
2013Q1 (0, 5] [2, 5] 1
(5, 10] [2, 5] 1
2013Q1 2012Q3 (0, 5] (5, 8] 1
2013Q1 (5, 10] (5, 8] 2
2013Q2 2012Q4 (0, 5] (5, 8] 1
2013Q2 (0, 5] [2, 5] 1
关于python - pandas 日期字段的 cut/qcut 等价于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16319106/
所以我在 python 中有这段代码,目前它只返回切割杆的最大值。我怎样才能修改它以让我也知道切割的位置?它采用一个价格列表,其指数 +1 对应于每个长度的杆的值(value),n 对应于杆的长度。
我正在从 bash 中的 NFS 位置获取服务器和路径,如下所示: #!/bin/bash ST="/net/10.111.111.111/path/to/some/dir" echo $ST SER
我已经创建了一个脚本来枚举目录及其下的所有文件。我想通过使用 pv 添加一些进度反馈,因为我通常从根目录使用它。 问题是 find 在它的时间输出 (%TT) 中总是包含小数秒,但我不想记录那么多细节
我不是java编码员,但需要一个可以执行的命令 cut -d "/" -f1,2,3 MyFile 有什么想法吗? 最佳答案 读取文件。在 / 上拆分每一行,然后打印出前三部分。 BufferedRe
有谁知道R如何在cut函数中选择有效位数? y y breaks1 table(cut(y, breaks = breaks1, dig.lab = min(nchar(breaks1)))) #
我创建了 pycharm Ubuntu中的命令,但我有一个小问题。当我执行命令时,pycharm 打开,但它仍然与终端相关。我的意思是如果我关闭终端,pycharm 最终也会关闭。有没有一种简单的方法
Unix cut command 需要一个字段列表,但不是我需要的顺序。 $ echo 1,2,3,4,5,6 | cut -d, -f 1,2,3,5 1,2,3,5 $ echo 1,2,3,4,
我正在尝试使用 Unix cut删除每行的前两个字段。我有表单的输入行 ( token )(空格)( token )(大量文本) 问题是有退出n每行 token ,所以我不能做这样的事情 cut -f
我正在用 Python 实现一个 PEG 解析器生成器,到目前为止我已经取得了成功,除了“cut”功能,任何了解 Prolog 的人都必须知道。 这个想法是,在解析了剪切 ( ! ) 符号后,不应在同
我目前正在为剪切而苦苦挣扎......我不知道是否还有其他功能。 我有一个包含值的大表和一个包含阈值的矩阵或向量。 假设我有一个包含阈值 0.6、0.8、1.0、1.2、1.4 的矩阵我想找出一个值(
我想使用 cut() 中定义的中断来剪切我的数据: x = c(-10:10) cut(x, c(-2,4,6,7)) [1] (-2,4] (-
我正在使用 cut()以 0.05 的增量对从负值到正值的列表进行分类。但是,在 -0.05 到 0.05 范围内对零的处理会根据 cut 函数中使用的范围(参见下面的示例)而变化,因此我得到 [-0
我正在探索 cut 函数的使用,并尝试将以下基本向量切割成 10 个断点。我可以做到,但我很困惑为什么我的初始中断发生在 -0.1 而不是 0: test_vec <- 0:10 test_vec2
我有一个大的制表符分隔文件(10TB)。 我想按某些列削减文件,我想使用我的24个内核中的每一个并行执行此操作。 cut -f1,2,3 file > out 关于如何使用多个内核或并行执行此操作的任
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我已经阅读了有关此主题的许多主题,但我在那里找到的代码似乎不起作用。我正在尝试禁用 Excel 电子表格中的“剪切”功能,并且我希望该图标变灰。 我一直在使用这段代码: Sub WorkSheet_A
我正在尝试使用“剪切”命令分析风力数据, 我要设置16个风向 我如何将方向 348.75 至 11.25 切割为“0”标签?谢谢 埃利亚夫 最佳答案 这可能不是一个通用的临时解决方案,但您可以通过将
我是编程新手(正在上课),我不确定如何完成这项任务。 “忽略大小写,找到输入中最后一次出现的‘a’,并删除其后面的所有字符。如果单词中没有‘a’,则删除除前两个字符之外的所有字符(提醒:不要使用if语
我有这样的文字: word1 word2 word3 word4 一对单词之间可能有多个空格,我想从每一行中获取一些单词列。当我使用 cat 文件时 | cut -d ' ' -f1,2,4 似
编辑:添加 defT 使用 pandas.cut 是否会改变 pandas.DataFrame 的结构。 我按以下方式使用 pandas.cut 将单个年龄年份映射到年龄组,然后进行聚合。但是,聚合不
我是一名优秀的程序员,十分优秀!