【发布时间】:2016-09-29 22:46:44
【问题描述】:
我在 python 中有一个大数据框,我想根据多个 for 循环选择特定的行。有些列中包含列表。我的最终目标是生成一些优化约束并将它们传递给另一个软件:
T S W Arrived Departed
[1,2] [4,2] 1 8 10
[3,4,5] [3] 1 12 18
[6,7] [1,2] 2 10 11
. . . . .
. . . . .
def Cons(row):
if row['W'] == w and sum(pd.Series(row['T']).isin([t])) != 0 and sum(pd.Series(row['S']).isin([s])) != 0:
return 1
for w in range(50):
for s in range(30):
for t in range(12):
df.Situation = df.apply(Cons, axis = 1)
A = df[ (df.Situation == 1) ]
A1 = pd.Series(A.Arrived).tolist()
D1 = pd.Series(A.Departed).tolist()
Time = tuplelist(zip(A1,D1))
我怎样才能有效地做到这一点,因为通过多个 for 循环需要很长时间才能运行?
【问题讨论】:
-
从您的代码来看,嵌套循环只经过 50 * 30 * 12 = 18000 次迭代。假设最内层循环的主体不做任何计算密集型的事情,这应该不是问题。
-
@xuanluong,他的算法是
O(n^3),这对大数据来说不是那么好——但对于小迭代我同意你的看法并没有那么糟糕 -
@coder 嗯,大数据,但有多大?也许 OP 应该提供更多关于数据数量级的上下文。否则,三次时间复杂度是足够好还是太慢只是任何人的猜测。
-
用这种格式运行很慢。
-
我编辑了我的主要问题。抱歉,我是初学者,每一步都可能看起来效率不高。