![](/img/trans.png)
[英]MultiIndex DataFrame: Delete non-consecutive indices and re-index
[英]For loop with non-consecutive indices
我對 Phyton 很陌生並且使用數據框,所以這可能是一個非常簡單的問題。
我成功地導入了一些測量數據(1 分鍾分辨率)並對它們進行了一些計算。 我想以 15 分鍾為基礎(不是平均值)重新計算一些數據處理,為此我從原始數據框中提取了每一行:00、:15、:30 和:45。
df_interval = df[(df['DateTime'].dt.minute == 0) | (df['DateTime'].dt.minute == 15) | (df['DateTime'].dt.minute == 30) | (df['DateTime'].dt.minute == 45)]
這似乎工作正常。 現在我想根據儀器內部所做的每 15 分鍾重新計算一次濃度,這是一個簡單的公式。
所以我嘗試的是:
for i in df_interval.index:
if np.isnan(df_interval.ATN[i]) == False and np.isnan(df_interval.ATN[i+1]) == False:
df_15min = (0.785 *((df_interval.ATN[i+1]-df_interval.ATN[i])/100))/(df_interval.Flow[i]*(1-0.07)*10.8*(1-df_interval.K[i]*df_interval.ATN[i])*15)
然而,我最終得到一個 KeyError: 226。我不明白為什么......
更新:
這是數據,在最后一列 (df_15min) 中也是我想要獲得的結果:
航空運輸網 | 流 | 鉀 | df_15min | |
---|---|---|---|---|
150 | 3647 | 0.00994 | ||
165 | 3634 | 0.00996 | ||
180 | 3634 | 0.00995 | ||
195 | 3621 | 0.00995 | ||
210 | 3615 | 0.00994 | ||
225 | 1.703678939 | 3754 | 0.00994 | 3.75E-08 |
240 | 4.356519267 | 3741 | 0.00994 | 3.84E-08 |
255 | 6.997422571 | 3741 | 0.00994 | 3.94E-08 |
270 | 9.627710046 | 3736 | 0.00995 | 4.02E-08 |
285 | 12.23379251 | 3728 | 0.01007 | 3.89E-08 |
300 | 14.67175418 | 3727 | 0.01026 | 3.76E-08 |
315 | 16.9583747 | 3714 | 0.01043 | 3.73E-08 |
330 | 19.1497249 | 3714 | 0.01061 | 3.96E-08 |
345 | 21.39628083 | 3709 | 0.01079 | 3.87E-08 |
360 | 23.51512717 | 3701 | 0.01086 | 4.02E-08 |
375 | 25.63995721 | 3700 | 0.01083 | 3.90E-08 |
390 | 27.63886191 | 3688 | 0.0108 | 3.47E-08 |
405 | 29.36343728 | 3688 | 0.01076 | 3.68E-08 |
420 | 31.14291069 | 3677 | 0.01072 | 3.90E-08 |
我在 Igor 做了很多事情,所以我會在那里做(不幸的是,這次它必須在 python):
variable i
For (i=0; i<numpnts(ATN)-1; i+=1)
df_15min[i] = (0.785 *((ATN[i+1]-ATN[i])/100))/(Flow[i]*(1-0.07)*10.8*(1-K[i]*ATN[i])*15)
endfor
任何幫助將不勝感激,謝謝!
您的 if 條件檢查bc _interval.row1[i+1] 是否為 nan,然后您訪問df _interval.row1[i+1]。 看起來您想改為檢查df _interval.row1[i+1] 。
您可以從字面上編寫與矢量代碼相同的操作。 只需使用整行和shift(-1)
即可獲得“下一個”行。
df['df_15min'] = (0.785 *((df['ATN'].shift(-1)-df['ATN'])/100))/(df['Flow']*(1-0.07)*10.8*(1-df['K']*df['ATN'])*15)
或者使用diff
:
df['df_15min'] = (0.785 *((-df['ATN'].diff(-1))/100))/(df['Flow']*(1-0.07)*10.8*(1-df['K']*df['ATN'])*15)
output:
ATN Flow K df_15min
index
150 NaN 3647 0.00994 NaN
165 NaN 3634 0.00996 NaN
180 NaN 3634 0.00995 NaN
195 NaN 3621 0.00995 NaN
210 NaN 3615 0.00994 NaN
225 1.703679 3754 0.00994 3.745468e-08
240 4.356519 3741 0.00994 3.844700e-08
255 6.997423 3741 0.00994 3.937279e-08
270 9.627710 3736 0.00995 4.019633e-08
285 12.233793 3728 0.01007 3.886148e-08
300 14.671754 3727 0.01026 3.763219e-08
315 16.958375 3714 0.01043 3.734876e-08
330 19.149725 3714 0.01061 3.955360e-08
345 21.396281 3709 0.01079 3.870011e-08
360 23.515127 3701 0.01086 4.017342e-08
375 25.639957 3700 0.01083 3.897022e-08
390 27.638862 3688 0.01080 3.473242e-08
405 29.363437 3688 0.01076 3.675232e-08
420 31.142911 3677 0.01072 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.