如果滿足某些條件,我想在當前存儲在第(row + 1)行中的第二天的開放價格中提取價格並將其存儲在新列中。大熊貓在數據框中的列表理解
df['b']=''
df['shift']=''
df['shift']=df['open'].shift(-1)
df['b']=df[x for x in df['shift'] if df["MA10"]>df["MA100"]]
如果滿足某些條件,我想在當前存儲在第(row + 1)行中的第二天的開放價格中提取價格並將其存儲在新列中。大熊貓在數據框中的列表理解
df['b']=''
df['shift']=''
df['shift']=df['open'].shift(-1)
df['b']=df[x for x in df['shift'] if df["MA10"]>df["MA100"]]
有幾種方法。使用apply
:
>>> df = pd.read_csv("bondstack.csv")
>>> df["shift"] = df["open"].shift(-1)
>>> df["b"] = df.apply(lambda row: row["shift"] if row["MA10"] > row["MA100"] else np.nan, axis=1)
產生
>>> df[["MA10", "MA100", "shift", "b"]][:10]
MA10 MA100 shift b
0 16.915625 17.405625 16.734375 NaN
1 16.871875 17.358750 17.171875 NaN
2 16.893750 17.317187 17.359375 NaN
3 16.950000 17.279062 17.359375 NaN
4 17.137500 17.254062 18.640625 NaN
5 17.365625 17.229063 18.921875 18.921875
6 17.550000 17.200312 18.296875 18.296875
7 17.681250 17.177500 18.640625 18.640625
8 17.812500 17.159375 18.609375 18.609375
9 17.943750 17.142813 18.234375 18.234375
對於更量化的方法,你可以使用
>>> df = pd.read_csv("bondstack.csv")
>>> df["b"] = np.nan
>>> df["b"][df["MA10"] > df["MA100"]] = df["open"].shift(-1)
或我的首選方法:
>>> df = pd.read_csv("bondstack.csv")
>>> df["b"] = df["open"].shift(-1).where(df["MA10"] > df["MA100"])
不能告訴你我有多少讚賞(在這個網站上)你的深思熟慮的建議和多種查看同一問題的方式。謝謝。 – 2013-04-11 12:18:44
對於方法#3,我得到的時間序列對象沒有屬性'where'給出,其中是一個numpy屬性,我用np.where()具有相同的錯誤。你有什麼想法嗎? – 2013-04-11 13:16:12
您使用的是哪個版本的'pandas'?我使用0.10.1,上面的代碼對你的數據工作得很好。 – DSM 2013-04-11 13:35:31
修改DSM的方法3,說明在np.where
明確真/假值:
#numpy.where(condition, x, y)
df["b"] = np.where(df["MA10"] > df["MA100"], df["open"].shift(-1), np.nan)
使用明確列表理解:
#[xv if c else yv for (c,xv,yv) in zip(condition,x,y)] #np.where documentation
df['b'] = [ xv if c else np.nan for (c,xv) in zip(df["MA10"]> df["MA100"], df["open"].shift(-1))]
如果您想使用列表解析的結果作爲指標,你應該使用:'DF [[對於df ['shift']中的x,如果df [「MA10」]> df [「MA100」]]]',但我認爲這會引發一些異常。請張貼您的樣本數據和期望的結果。 – HYRY 2013-04-11 05:28:44
@HYRY感謝您的評論。我發佈了一個鏈接到我的示例數據。我在發佈之前使用了您的建議,並收到了錯誤「無效的語法」,正如我所提到的。 – 2013-04-11 11:28:30
@ user1374969:計算HYRY建議中括號的數量,然後計算你的數量。 – DSM 2013-04-11 11:36:32