繁体   English   中英

相当于for循环,可减少熊猫数据帧操作的执行时间

[英]For loop equivalent to reduce execution time in pandas data frame operation

我写了这样的for循环:

for i in newc2sdf.Source.unique():
    ydf=newc2sdf[newc2sdf.Source==i]
    for j in newc2sdf.Destination.unique():
        ydf1=ydf[ydf.Destination==j]

由于我有很多独特的记录,因此执行需要花费大量时间。

我将从ydf1做一些基本操作,它将返回一个值,并将该值附加在列表中。

我想从源和目标将是唯一的另一列计算值的总和。

我还有另一列称为timestamp的列(例如:2016-08-01 00:10:01),它采用numpy.datetime64格式,我希望这些值的总和比特定来源的最小时间戳长5分钟到目的地。

是否有其他选择可以减少执行时间。

给定以下示例数据框:

newc2sdf = pd.DataFrame([['Home','Seattle',3],['Vacation','San Francisco',74],['Work','Portland',9],
                        ['Vacation','Seattle',24],['Work','Portland',4],['Home','Seattle',5],
                        ['Work','Portland',31],['Vacation','San Francisco',19],['Work','San Francisco',38],
                        ['Home','Seattle',85],['Work','San Francisco',32],['Vacation','Seattle',73]],
                        columns=['Source','Destination','Value'])

这使:

      Source    Destination  Value
0       Home        Seattle      3
1   Vacation  San Francisco     74
2       Work       Portland      9
3   Vacation        Seattle     24
4       Work       Portland      4
5       Home        Seattle      5
6       Work       Portland     31
7   Vacation  San Francisco     19
8       Work  San Francisco     38
9       Home        Seattle     85
10      Work  San Francisco     32
11  Vacation        Seattle     73

要计算“源和目标将是唯一的另一列中的值之和”,我可以想象您正在寻找groupby()agg()

newc2sdf.groupby(['Source','Destination']).agg({'Value': 'sum'}))

产量:

                        Value
Source   Destination         
Home     Seattle           93
Vacation San Francisco     93
         Seattle           97
Work     Portland          44
         San Francisco     70

最后,如果您要将值的此列存储到列表中:

newc2sdf.groupby(['Source','Destination']).agg({'Value': 'sum'})['Value'].tolist()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM