Python 如何比较循环中特定位置的两个值,并在Dataframe中的一系列值中追加数据
我有一个数据框,从中我提取了一些样本数据:Python 如何比较循环中特定位置的两个值,并在Dataframe中的一系列值中追加数据,python,pandas,loops,dataframe,Python,Pandas,Loops,Dataframe,我有一个数据框,从中我提取了一些样本数据: Time Val 0 70000 -322 1 70500 -439 2 71000 -528 3 71500 -606 4 72000 -642 5 72500 -663 6 73000 -620 7 73500 -561 8 74000 -592 9 74500 -614 10 75000 -630 11 75500 -719 12 8000
Time Val
0 70000 -322
1 70500 -439
2 71000 -528
3 71500 -606
4 72000 -642
5 72500 -663
6 73000 -620
7 73500 -561
8 74000 -592
9 74500 -614
10 75000 -630
11 75500 -719
12 80000 -613
13 80500 -127
14 81000 -235
15 81500 -186
16 82000 -82
17 82500 836
18 83000 1137
183 70000 -106
184 70500 -117
185 71000 -626
186 71500 -810
187 72000 -822
188 72500 -676
189 73000 -639
190 73500 -664
191 74000 -708
192 74500 -515
193 75000 -61
194 75500 -121
195 80000 -145
196 80500 -57
197 81000 -133
198 81500 101
199 82000 235
200 82500 585
201 83000 550
366 70000 18
367 70500 138
368 71000 22
369 71500 -68
370 72000 -146
371 72500 -163
372 73000 -251
373 73500 -230
374 74000 -218
375 74500 -137
376 75000 -126
现在,我想将73000时“Val”的值与[I-3]的值进行比较。如果值较小,则将连续值追加到列表中,直到时间达到80000。
我写了这个循环,但问题是‘Val’比较了73000和80000之间的所有值[I-3]。我希望比较只发生在73000,如果条件为真,则将数据写入列表(直到时间80000)
box=[]
对于df.index中的i:
如果df.Time[i]>=73000且df.Time[i]您需要记住另一个变量中的比较结果,并在遇到超出所需时间间隔的时间值时将其重置。代码如下所示
box = []
writeToList = False
for i in df.index:
if df.Time[i] < 73000 or df.Time[i] > 80000:
writeToList = False
if df.Time[i] == 73000 and df.Val[i] < df.Val[i-3]:
writeToList = True
if writeToList and df.Time[i] >= 73000 and df.Time[i] <= 80000 :
box.append(
{
'Time': df.Time[i],
'newVAL': df.Val[i],
}
)
box = pd.DataFrame (box, columns = ['Time','newVAL'])
box=[]
writeToList=False
对于df.index中的i:
如果测向时间[i]<73000或测向时间[i]>80000:
writeToList=False
如果df.Time[i]==73000且df.Val[i] 如果writeToList和df.Time[i]>=73000和df.Time[i]有几个问题:1。如果有多个日期为73000的条目,会发生什么情况?2.数据帧是否按“日期”列排序?是,值73000重复。循环应在每次73000+条件为真时提供列表,并将“Val”中的值写入列表,直到time=80000。如果time=73000,但Val[i]>Val[i-3],则不要附加到列表中,等待下一个循环给出答案。看看它是否有用。它似乎给了我正确的结果,谢谢!
box = []
writeToList = False
for i in df.index:
if df.Time[i] < 73000 or df.Time[i] > 80000:
writeToList = False
if df.Time[i] == 73000 and df.Val[i] < df.Val[i-3]:
writeToList = True
if writeToList and df.Time[i] >= 73000 and df.Time[i] <= 80000 :
box.append(
{
'Time': df.Time[i],
'newVAL': df.Val[i],
}
)
box = pd.DataFrame (box, columns = ['Time','newVAL'])