我是 pandas 和 python 的新手,我正在努力在我的代碼中實作回圈。我希望有人能幫助我。
我有以下資料框:
import pandas as pd
from pandas import Timestamp
pd.DataFrame({'DateTime': {0: Timestamp('2021-06-13 00:00:00'),
1: Timestamp('2021-06-13 02:00:00'),
2: Timestamp('2021-06-13 05:00:00'),
3: Timestamp('2021-06-13 07:00:00'),
4: Timestamp('2021-06-13 10:00:00')},
'actual_value': {0: 180.0949105082311,
1: 183.93185469787613,
2: 191.48399886639095,
3: 188.31358023933768,
4: 159.32768035801615},
'forecast_0': {0: nan,
1: 185.0,
2: 206.0,
3: 193.0,
4: 130.0},
'forecast_1': {0: 187.0,
1: 185.0,
2: 206.0,
3: 192.0,
4: 130.0},
'forecast_2': {0: 186.0,
1: nan,
2: 200.0,
3: 192.0,
4: nan},
'forecast_3': {0: 186.0,
1: 185.0,
2: 200.0,
3: 192.0,
4: 130.0},
'forecast_4': {0: 186.0,
1: 183.0,
2: 200.0,
3: 188.0,
4: 130.0}})
DateTime actual_value forecast_0 forecast_1 forecast_2 \
0 2021-06-13 00:00:00 180.094911 NaN 187.0 186.0
1 2021-06-13 02:00:00 183.931855 185.0 185.0 NaN
2 2021-06-13 05:00:00 191.483999 206.0 206.0 200.0
3 2021-06-13 07:00:00 188.313580 193.0 192.0 192.0
4 2021-06-13 10:00:00 159.327680 130.0 130.0 NaN
forecast_3 forecast_4
0 186.0 186.0
1 185.0 183.0
2 200.0 200.0
3 192.0 188.0
4 130.0 130.0
我想創建一個新的資料框或用簡單的計算替換現有資料框中的數字。我想確定第二列中所有預測值相對于實際值的偏差。由于有超過 40 個這樣的預測列,因此寫下每一列的計算實在是太費時了。這就是為什么我想實作一個回圈。我嘗試了以下代碼,但沒有成功:
for i, col in enumerate(df.columns, -2):
df[col] = (df[col]-df['actual_value'])/df['actual_value']
我收到錯誤訊息,“減法”不能使用型別為 dtype('<M8[ns]') 和 dtype('float64') 的運算元。有誰知道如何解決這個問題?我感謝每一條訊息。
uj5u.com熱心網友回復:
錯誤 'subtract' 不能使用型別為 dtype('<M8[ns]') 和 dtype('float64') 的運算元是因為您的回圈試圖減去第一列,即 datetime 和 actual_value 列中的浮點數。
要正確執行此操作,您可以將回圈更改為 for col in df.columns[2:]:
即使我同意此處發布的其他解決方案 - 不使用回圈更優雅。
uj5u.com熱心網友回復:
您正在尋找pd.DataFrame.sub和pd.DataFrame.div:
>>> df.iloc[:, 2:].sub(df["actual_value"], axis=0).div(df["actual_value"], axis=0)
forecast_0 forecast_1 forecast_2 forecast_3 forecast_4
0 NaN 0.038341 0.032789 0.032789 0.032789
1 0.005807 0.005807 NaN 0.005807 -0.005066
2 0.075808 0.075808 0.044474 0.044474 0.044474
3 0.024886 0.019576 0.019576 0.019576 -0.001665
4 -0.184071 -0.184071 NaN -0.184071 -0.184071
經驗法則:如果您希望使用回圈對 DataFrame 進行操作,那么您做錯了什么。
uj5u.com熱心網友回復:
您可以使用 str.contains 選擇包含“預測”的變數,然后應用:
df.loc[:,df.columns.str.contains('forecast')].apply(lambda x: (x-df['actual_value'])/df['actual_value'])
Out[0]:
forecast_0 forecast_1 forecast_2 forecast_3 forecast_4
0 NaN 0.038341 0.032789 0.032789 0.032789
1 0.005807 0.005807 NaN 0.005807 -0.005066
2 0.075808 0.075808 0.044474 0.044474 0.044474
3 0.024886 0.019576 0.019576 0.019576 -0.001665
4 -0.184071 -0.184071 NaN -0.184071 -0.184071
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/414798.html
標籤:
下一篇:如何從RGB值創建熱圖?
