可以执行
df.groupby.rolling.agg({'any_df_col': 'count'})
但是agg号的怎么样?
'count'将生成一个序列,其中包含与groupby条件(1,1,1,2,3 ...)匹配的行的'running count',但我想知道,对于所有这些行,在这种情况下与groupby(so,1,1,3,3,3)匹配的总行数是多少。
通常我认为Pandas是通过大小而不是数量来实现的。
这个代码可以说明。
x一个一个一个一个x一个一个二个一个x一个一个三个一个
我想要的输出是得到组的大小......如下:
type
value time_ref
1 2023-01-01 00:30:00 2
2023-01-01 01:00:00 2
2 2023-01-01 00:30:00 1
10 2023-01-01 02:00:00 3
2023-01-01 02:15:00 3
2023-01-01 02:16:00 3
2023-01-01 04:00:00 1
我想不出一种方法来做我需要的事情而不使用滚动功能,因为我的数据的相关窗口不是由日历时间而是由事件本身的时间确定的...如果这个假设是错误的,我可以这样做,并在不使用滚动的情况下获得一个"大小",这是可以的,但据我所知,我必须使用滚动,因为事件的time_ref是与后续行分组的重要因素,而不是纯粹的日历时间。
谢谢。
3条答案
按热度按时间m528fe3b1#
我没有完全理解您的问题,您似乎希望
type
列是给定值每增加1小时的行数......但如果是这种情况,您希望的输出是不正确的,应该是:如果这是正确的,那么,开始:
...只需添加一个小时列:
并在其上聚集
value
:它提供给您:
...您可以将其连接回原始df:
如果这不是你想要的,你可以澄清你的问题。
j5fpnvbx2#
啊......谢谢你的澄清。我现在明白问题所在了。我试过滚动,但也找不到一种方法让它工作......但这里有一个替代方法:
(
.view(int)
将时间增量更改为纳秒。因此/ 1_000_000_000 / 60
将其更改为自第一组以来的分钟数,// 60
将其更改为自第一组以来的整小时数。)res
:......不过,更熟悉
rolling
功能的人可能会为您找到更简单的解决方案:)0qx6xfy63#
如果
.rolling
与count
组合不起作用,那么我不认为这是一个真正的“rolling
-问题”。您可以尝试以下方法(我认为这与Damians 2. answer类似):样品结果: