我写了这样的for循环:
for i in newc2sdf.Source.unique():
ydf=newc2sdf[newc2sdf.Source==i]
for j in newc2sdf.Destination.unique():
ydf1=ydf[ydf.Destination==j]
由于我有很多独特的记录,因此执行需要花费大量时间。
我将从ydf1做一些基本操作,它将返回一个值,并将该值附加在列表中。
我想计算另一列的值之和,其中源和目标将是唯一的。
我还有另一列称为时间戳记(例如:2016-08-01 00:10:01),它采用numpy.datetime64格式,我希望时间戳记的总和比最小时间戳记多5分钟到目的地的特定来源。
是否有其他选择可以减少执行时间。
答案 0 :(得分:0)
给出以下示例数据框:
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()