- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试将 x 天的组放在另一列的组中。出于某种原因,当我添加另一级别的分组时,分组行为发生了变化。
参见下面的玩具示例:
创建一个包含 40 个连续日期、一个 ID 列和随机值的随机数据框:
import numpy as np
import pandas as pd
df = pd.DataFrame(
{'dates':pd.date_range('2018-1-1',periods=40,freq='D'),
'id': np.concatenate((np.repeat(1,10),np.repeat(2,30))),
'amount':np.random.random(40)
}
)
我想先按 id
分组,然后在这些组中连续 7 天进行分组。我这样做:
(df
.groupby(['id',pd.Grouper(key='dates',freq='7D')])
.amount
.agg(['mean','count'])
)
输出是:
mean count
id dates
1 2018-01-01 0.591755 7
2018-01-08 0.701657 3
2 2018-01-08 0.235837 4
2018-01-15 0.650085 7
2018-01-22 0.463854 7
2018-01-29 0.643556 7
2018-02-05 0.459864 5
第二组中发生了一些奇怪的事情!我希望看到 4 组 7 人,然后是最后一组 2 人。当我在数据帧上运行相同的代码时,只有 id=2
我确实得到了我真正期望的结果:
df2=df[df.id==2]
(df2
.groupby(['id',pd.Grouper(key='dates',freq='7D')])
.amount
.agg(['mean','count'])
)
输出
mean count
id dates
2 2018-01-11 0.389343 7
2018-01-18 0.672550 7
2018-01-25 0.486620 7
2018-02-01 0.520816 7
2018-02-08 0.529915 2
这是怎么回事?是不是因为id=1
组的最后一组只有3行,所以先在id=2
组创建4组?这不是我想做的!
最佳答案
当您使用两个 ID 进行分组时,当您执行每周分组时,您会从第一组溢出到第二组(因为最后一周没有足够的天数来完成组 #1 中的整整 7 天)。当您查看每个组的第一个日期时,这是显而易见的:
第一个案例中的“2018-01-08”与“2018-01-11”。
解决方法是对id
执行groupby
,然后应用
重采样操作:
df.groupby('id').apply(
lambda x: x.set_index('dates').amount.resample('7D').count()
)
id dates
1 2018-01-01 7
2018-01-08 3
2 2018-01-11 7
2018-01-18 7
2018-01-25 7
2018-02-01 7
2018-02-08 2
Name: amount, dtype: int64
关于python - 带有日期时间对象的 pandas Grouper 方法的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50596307/
我的意思是: 给定输入的数字集: 1,2,3,4,5 变成“1-5”。 1,2,3,5,7,9,10,11,12,14 变成“1-3, 5, 7, 9-12, 14” 这是我想出的最好的:[C#] 我
考虑一个具有 MultiIndex 的系列,该系列在级别 0 上提供自然分组值,在级别 1 上提供时间序列: s = pd.Series(range(12), index=pd.MultiIndex.
从这里开始: https://docs.python.org/3/library/itertools.html#itertools-recipes def grouper(iterable, n, f
我有每月的时间序列数据,这些数据既缺少一些条目,又由于其他原因分散了 NaN 值。我需要将数据汇总到季度和年度系列中,但我不想报告缺少数据的季度/年度数据。例如,在下面的数据中,我不想报告 2014
难道 pandas.Grouper 只被认为是用于日期?或者它也可以用于整数吗? 我想将 pandas.Grouper 与 pandas.pivot_table 结合使用。以下是有关如何将 panda
我有一个像这样的示例数据框: import pandas as pd df = pd.DataFrame({"id": [0]*5 + [1]*5, "time": ['20
我有一个时间序列,我正在将其重新采样为 5s 窗口,如下所示: INDEX size price 2018-05-07 21:53:13.731
我有一个数据集,我想按列和数据集中每个月的数据进行分组。我使用 pd.Grouper() 作为每月分组日期部分。 df.groupby(['A',pd.Grouper(key='date', freq
我正在尝试将 x 天的组放在另一列的组中。出于某种原因,当我添加另一级别的分组时,分组行为发生了变化。 参见下面的玩具示例: 创建一个包含 40 个连续日期、一个 ID 列和随机值的随机数据框: im
我搜索了 stackoverflow 以了解如何按月对 DateTime 进行分组,但出于某种原因我一直收到此错误,即使在我通过 pd.to.datetime 传递数据帧之后也是如此 TypeErro
我是Python新手。在阅读 python 标准库引用时,我对 itertools 食谱部分中的 grouper() 示例感到困惑。 我尝试将示例代码放入一个小程序中,如下所示: from itert
我正在尝试学习如何在 Python 中使用 itertools.groupby,我想找到每组字符的大小。起初我试图看看我是否可以找到单个组的长度: from itertools import grou
我有这个 Pandas 数据框 datetime machineID errorID 0 2015-01-06 03:00:00 1 error3 1
以下数据以5分钟为间隔 数据框名称为 df: 脚本 ID 约会时间 打开 高的 低的 关闭 体积 0 201 2019-02-04 14:55:00 1408.05 1408.05 1407 1408
我在我的数据集上编写了这两个 groupby 函数,第一个函数对我的数据进行分组,并将数据的日期时间分隔为开始日期时间、结束日期时间。 这是数据集: Blast HoleEast Coordinate
我有一个包含 38 列的数据框,其中一列是时间。我建立了一个bin框架空间 timeframe=['4-6','7-9','10-12','13-15','16-18','19-21','22-24'
我正在尝试获取每家医院每天的平均记录数。 |Hospital|Date|Number of Records 0|Hospital B|2018-02-12 16:07:54.183|5 1|Hospi
我有一个带有每小时时间戳的 DataFrame: 2019-01-01 0:00:00 1 2019-01-01 1:00:00 2 2019-01-1
我有这样的代码: y1 = data.groupby(['name', pd.Grouper(key='datetime', freq='15d')])['ext price'].mean() y=p
你好,我正在使用 Python 的 itertools 中的 Grouper 函数来削减大块的 select where in(idlist) 查询以提高 sqlite 性能。问题是石斑鱼填满了 ch
我是一名优秀的程序员,十分优秀!