Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么在熊猫数据框中按日期分组如此缓慢?_Python_Python 3.x_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

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