Python 为什么在熊猫数据框中按日期分组如此缓慢?
我试图在熊猫数据帧上执行Python 为什么在熊猫数据框中按日期分组如此缓慢?,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我试图在熊猫数据帧上执行groupby,但对于日期类型来说速度非常慢。在本例中,我认为按date分组比按int分组的运行时间长10倍,即使没有对数据执行任何操作 将日期时间导入为dt 作为pd进口熊猫 d=日期时间(年=2019,月=1,日=1) 日期=[d代表范围内的x(11500000)] 整数=[1代表范围内的x(11500000)] df=pd.DataFrame({'date':dates,'int':ints}) #这大约需要10秒钟 groupby(by=[df.date.map(
groupby
,但对于日期类型来说速度非常慢。在本例中,我认为按date
分组比按int
分组的运行时间长10倍,即使没有对数据执行任何操作
将日期时间导入为dt
作为pd进口熊猫
d=日期时间(年=2019,月=1,日=1)
日期=[d代表范围内的x(11500000)]
整数=[1代表范围内的x(11500000)]
df=pd.DataFrame({'date':dates,'int':ints})
#这大约需要10秒钟
groupby(by=[df.date.map(lambda x:x)])
#这大约需要1秒钟
groupby(by=[df.int.map(lambda x:x)])
您正在创建一个全新的要分组的值列表,并通过python函数进行分组,而不是让Panda只对您的值进行分组
这意味着您要复制大量数据,并且每次都要在numpy的原生datetime64和python datetime对象(具有多个字段)之间进行转换
试试这个:
将日期时间导入为dt
作为pd进口熊猫
从timeit导入timeit
d=日期时间(年=2019,月=1,日=1)
日期=[d代表范围内的x(115000)]
整数=[1代表范围内的x(115000)]
df=pd.DataFrame({'date':dates,'int':ints})
打印(timeit(lambda:df.groupby(by=[df.date.map(lambda x:x)]),number=100))
打印(timeit(lambda:df.groupby(by=[df.int.map(lambda x:x)]),数字=100))
打印()
打印(timeit(lambda:df.groupby('date'),数字=100))
打印(timeit(lambda:df.groupby('int'),数字=100))
输出(在我的机器上…)(对于ints仍然显示出一些优势,但数量级相同):
你为什么要画地图?这似乎没用。为什么不
df.groupby('date')
和df.groupby('int')
?我不会感到惊讶,这些会快得多。此外,日期
列不包含日期。它包含范围为(1500000)的数字。最后,一个显著的区别是,对于大约150万条记录,ìnts`实际上只是值1。出于某种原因,我无法编辑我之前的评论,但它包含一个错误。我误读了“代码和日期”列确实包含日期。@ApplePie请尝试打印(df['date']),您将看到dtype:datetime64[ns]
谢谢。我希望能够使用map
,这样我就可以在日期函数上执行分组。具体地说,我想按周分组。我知道我应该使用df.groupby(pd.Grouper(freq='w'))
4.080989988165176
0.7051316870900939
0.04927755465217576
0.03545470909939513