python - 按时间间隔将dataframe拆分为n 等间隔,其中时间间隔为( time.max ( ) 时间最小值为)/n

  显示原文与译文双语对照的内容

我有一个 dataframe,我想分成 5块( 更一般的n 块),这样我就可以在块上应用一个 groupby 。

我希望这些区块具有相同的时间间隔,但一般情况下,每个组可能包含不同数量的记录。

我们来把数据


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

还有 timeinterval ti = (s.max() - s.min())/n

所以第一个区块应包括 s.min()s.min() + ti 之间的所有行,第二个,所有行,包含 s.min() + tis.min() + 2*ti 之间的。

谁能提出一种简单的方法来实现这个目标? 如果某种程度上我可以将所有日期转换为以后的几秒钟,那么我可以像 thisgroup = floor(thisdate/ti) 一样。

是否有简单的'Pythonic'或者'熊猫 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]]

原作者:

答案如下:


s = pd.DataFrame(pd.date_range('2012-1-1', periods=20, freq='D'), columns=["date"])

n = 5

s["date"] = np.int64(s) #This step may not be needed in future pandas releases
s["bin"] = np.floor((n-0.001)*(s["date"] - s["date"].min( ))/((s["date"].max( ) - s["date"].min( ))))

原作者:
...