python - 将dataframe分成n个相等的时间间隔,进行groupby,其中时间间隔为(time.max() - time.min())/n

标签 python datetime pandas

我有一个数据框,我想将其拆分为 5 个 block (更常见的是 n 个 block ),以便我可以对这些 block 应用 groupby。

我希望 block 具有相同的时间间隔,但通常每个组可能包含不同数量的记录。

让我们调用数据

s = pd.Series(pd.date_range('2012-1-1', periods=100, freq='D'))

和时间间隔 ti = (s.max() - s.min())/n

所以第一个 block 应该包括日期在 s.min()s.min() + ti 之间的所有行,第二个 block 应该包括日期在 s.min() + ti 之间的所有行s.min() + tis.min() + 2*ti

任何人都可以提出一个简单的方法来实现这个目标吗?如果我能以某种方式将我所有的日期转换为自纪元以来的秒数,那么我就可以做类似 thisgroup = floor(thisdate/ti) 的事情。

是否有简单的“pythonic”或“panda-ista”方法来做到这一点?

非常感谢(圣诞快乐!)

罗宾

最佳答案

您可以使用 numpy.array_split :

>>> import pandas as pd
>>> import numpy as np
>>> s = pd.Series(pd.date_range('2012-1-1', periods=10, freq='D'))

>>> np.array_split(s, 5)
[0   2012-01-01 00:00:00
1   2012-01-02 00:00:00
dtype: datetime64[ns], 2   2012-01-03 00:00:00
3   2012-01-04 00:00:00
dtype: datetime64[ns], 4   2012-01-05 00:00:00
5   2012-01-06 00:00:00
dtype: datetime64[ns], 6   2012-01-07 00:00:00
7   2012-01-08 00:00:00
dtype: datetime64[ns], 8   2012-01-09 00:00:00
9   2012-01-10 00:00:00
dtype: datetime64[ns]]

>>> np.array_split(s, 2)
[0   2012-01-01 00:00:00
1   2012-01-02 00:00:00
2   2012-01-03 00:00:00
3   2012-01-04 00:00:00
4   2012-01-05 00:00:00
dtype: datetime64[ns], 5   2012-01-06 00:00:00
6   2012-01-07 00:00:00
7   2012-01-08 00:00:00
8   2012-01-09 00:00:00
9   2012-01-10 00:00:00
dtype: datetime64[ns]]

关于python - 将dataframe分成n个相等的时间间隔,进行groupby,其中时间间隔为(time.max() - time.min())/n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772005/

相关文章:

python - 如何根据星期几求平均值

java - 获取接下来三周的最后一天 Java

java - Gson 转换为具有两种日期格式的 Json 不起作用

python - 查找并删除具有由第三个唯一特征标识的两个相同特征的重复数据条目

python - pandas 将数据帧转换为数据透视表,其中索引是排序值

python - 在python中的特定位置播放音频文件

python - 使用 split() 在各种标点符号处划分字符串

python - 如何计算特定行在所有列中出现值的频率

java - Java 和多 SQL RDBMS 之间的年度计算差异

python - 通过 .loc 在 Panda 切片上进行矩阵运算的有效方法