Python For循环等价于减少数据帧操作中的执行时间

Python For循环等价于减少数据帧操作中的执行时间,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我编写了一个for循环,如下所示: for i in newc2sdf.Source.unique(): ydf=newc2sdf[newc2sdf.Source==i] for j in newc2sdf.Destination.unique(): ydf1=ydf[ydf.Destination==j] 由于我有这么多独特的记录,执行起来需要很长时间 我将从ydf1执行一些基本操作,它将返回一个值,并将该值附加到列表中 我想计算另一列的值之和,其中源和目标是

我编写了一个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(ex: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()

收益率:

                        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()

在循环的每次迭代中,您都会在此处覆盖
ydf1
。我怀疑这是您的意图。为什么您希望源和目标的每个组合都有一个单独的数据帧?如果你给出一点关于这将允许你实现什么的上下文,那么回答你的问题就会更容易。我将从ydf1执行一些基本操作,它将返回一个值,我将在列表中附加该值。我只是想减少执行时间。我有另一列名为timestamp(ex:2016-08-01 00:10:01),格式为numpy.datetime64,我想要的是那些时间戳将比特定源到目的地的最小时间戳多5分钟的总和。这是一个与您最初发布的问题完全不同的问题。抱歉。我尝试使用for循环,它提供了过滤后的数据帧,我可以在其中计算其余的数据。但这需要很长时间。我正在寻找一些解决方案,如你所张贴的,我感谢。
newc2sdf.groupby(['Source','Destination']).agg({'Value': 'sum'})['Value'].tolist()