更新:从版本0.20.0开始,pandas cut/qcut处理日期字段.有关更多信息,请参阅新功能.
pd.cut和pd.qcut现在支持datetime64和timedelta64 dtypes(GH14714,GH14798)
原始问题: Pandas cut和qcut函数非常适合用于数据透视表等的"bucketing"连续数据,但我看不到一种简单的方法来获取日期时间轴.令人沮丧,因为大熊猫在所有与时间有关的东西中都是如此之大!
这是一个简单的例子:
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 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用自定义范围对日期进行分组groupby
,但cut
到目前为止尚未成功。从返回的错误消息来看,我想知道 cut 是否正在尝试将我的日期处理为数字。
我想df1['date']
按自定义日期范围进行分组,然后对df1['HDD']
值求和。自定义范围位于df2
:
import pandas as pd
df1 = pd.DataFrame( {'date': ['2/1/2015', '3/2/2015', '3/3/2015', '3/4/2015','4/17/2015','5/12/2015'],
'HDD' : ['7.5','8','5','23','11','55']})
HDD date
0 7.5 2/1/2015
1 8 3/2/2015
2 5 3/3/2015
3 23 3/4/2015
4 11 4/17/2015
5 55 5/12/2015
Run Code Online (Sandbox Code Playgroud)
df2
具有自定义日期范围:
df2 = pd.DataFrame( {'Period': ['One','Two','Three','Four'],
'Start Dates': ['1/1/2015','2/15/2015','3/14/2015','4/14/2015'],
'End Dates' : ['2/14/2015','3/13/2015','4/13/2015','5/10/2015']})
Period Start Dates End Dates
0 One 1/1/2015 2/14/2015
1 Two 2/15/2015 3/13/2015
2 Three 3/14/2015 4/13/2015 …
Run Code Online (Sandbox Code Playgroud)