[英]Problem with for-if loop statement operation on pandas dataframe
[英]Problems with a for loop/ if statement in a pandas DataFrame
我的代碼如下:
df.head(3)
1. open 2. high 3. low 4. close 5. volume
date
2021-02-18 241.80 243.93 240.86 243.79 16925563.0
2021-02-17 241.32 244.31 240.94 244.20 21451617.0
2021-02-16 245.03 246.13 242.92 243.70 26728487.0
我添加了一個新列,將“4.close”與前一天的“4.close”進行比較。 那行得通。
for i in df["4. close"]:
df["changeAbsolute"] = df["4. close"] - df["4. close"].shift(-1)
df.head(3)
1. open 2. high 3. low 4. close 5. volume changeAbsolute
date
2021-02-18 241.8000 243.93 240.86 243.79 16925563.0 -0.41
2021-02-17 241.3200 244.31 240.94 244.20 21451617.0 0.50
2021-02-16 245.0300 246.13 242.92 243.70 26728487.0 -1.29
現在我的問題來了:
添加另一列時,如果 df["changeAbsolute"] 為正,則顯示“+”,如果為負,則顯示“-”,如果為 0,則顯示“unch”
for i in df["changeAbsolute"]:
if i < 0:
df["Change"] = "-"
elif i > 0:
df["Change"] = "+"
else:
df["Change"] = "unch"
df.head(3)
1. open 2. high 3. low 4. close 5. volume changeAbsolute Change
date
2021-02-18 241.8000 243.93 240.86 243.79 16925563.0 -0.41 unch
2021-02-17 241.3200 244.31 240.94 244.20 21451617.0 0.50 unch
2021-02-16 245.0300 246.13 242.92 243.70 26728487.0 -1.29 unch
我期待:
1. open 2. high 3. low 4. close 5. volume changeAbsolute Change
date
2021-02-18 241.8000 243.93 240.86 243.79 16925563.0 -0.41 -
2021-02-17 241.3200 244.31 240.94 244.20 21451617.0 0.50 +
2021-02-16 245.0300 246.13 242.92 243.70 26728487.0 -1.29 -
我更改了 if/elif/else 語句中的順序。 它沒有幫助。 我只回來了其他。 任何人都可以幫忙嗎?
您可以使用np.sign
然后在此處使用Series.map
。
df['Change'] = np.sign(df['changeAbsolute']).map({1.0:'+', -1.0:'-', 0:'unch'})
或者,使用np.select
condList = [df['changeAbsolute']>0, df['changeAbsolute']<0]
choiceList = ['+', '-']
df['change'] = np.select(condList, choiceList, 'unch')
並改變這個
for i in df["4. close"]:
df["changeAbsolute"] = df["4. close"] - df["4. close"].shift(-1)
至
df["changeAbsolute"] = df["4. close"] - df["4. close"].shift(-1)
為了使其更簡潔,您可以Series.diff
執行相同的操作
df['changeAbsolute'] = df['4. close'].diff(-1)
為什么你的代碼給出錯誤的輸出看看這個例子
df["Change"] = "-"
這會將'-'
分配給列中的每個值。
如果您仍然想使用,請嘗試以下操作:
df.iloc[idx, 'change'] = '-' # idx is the index of the row
在 Pandas 中,您可以一次處理整個列,這稱為矢量化。
要計算df['changeAbsolute']
,需要一個操作:
df["changeAbsolute"] = df["4. close"] - df["4. close"].shift(-1)
然后對於最后一列,您可以使用np.where
:
df['Change'] = np.where(df.changeAbsolute > 0, '+', np.where(
df.changeAbsolute < 0, '-', 'unch'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.