【发布时间】:2020-03-12 15:30:16
【问题描述】:
我在一个大型 csv 文件(150 万行)上运行此代码。有没有办法优化?
df 是一个熊猫数据框。 我排了一行,想知道接下来的 1000 行中的第一行发生了什么:
我找到我的价值 + 0.0004 或者我找到我的价值 - 0.0004
result = []
for row in range(len(df)-1000):
start = df.get_value(row,'A')
win = start + 0.0004
lose = start - 0.0004
for n in range(1000):
ref = df.get_value(row + n,'B')
if ref > win:
result.append(1)
break
elif ref <= lose:
result.append(-1)
break
elif n==999 :
result.append(0)
数据框是这样的:
timestamp A B
0 20190401 00:00:00.127 1.12230 1.12236
1 20190401 00:00:00.395 1.12230 1.12237
2 20190401 00:00:00.533 1.12229 1.12234
3 20190401 00:00:00.631 1.12228 1.12233
4 20190401 00:00:01.019 1.12230 1.12234
5 20190401 00:00:01.169 1.12231 1.12236
结果是:result[0,0,1,0,0,1,-1,1,…]
这是可行的,但处理如此大的文件需要很长时间。
【问题讨论】:
-
你能分享预期的输出吗?
-
请发布示例数据框以及所需的输出。
-
@Cleb :我添加了一个示例数据框,输出是一个包含 1、-1 或 0 值的列表。
-
所以如果 B 比 A 多于
0.004那么你想将 1 添加到列表中,如果它小于0.004然后 -1 否则为 0? -
@Datanovice :我取给定行的值 A,并且想知道女巫案件首先发生在以下 1000 行中:-我在 B > A+0.0004 => 中找到了一个值 => 我返回1 - 或者我在 B 中找到了一个值 => 我返回 -1 - 我在 1000 行中一无所获 (A-0.0004 我返回 0
标签: python pandas performance for-loop