我有一個OHLC價格的數據集,我已經從CSV解析成熊貓數據幀和重採樣爲15名分鐘巴的數據幀:添加計算的列(S)到在熊貓
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 500047 entries, 1998-05-04 04:45:00 to 2012-08-07 00:15:00
Freq: 15T
Data columns:
Close 363152 non-null values
High 363152 non-null values
Low 363152 non-null values
Open 363152 non-null values
dtypes: float64(4)
我想添加各種計算列,從簡單的例如Range(HL)開始,然後用布爾值來表示我將要定義的價格模式的發生 - 例如錘子蠟燭圖案,其中一個樣品的定義:
def closed_in_top_half_of_range(h,l,c):
return c > l + (h-1)/2
def lower_wick(o,l,c):
return min(o,c)-l
def real_body(o,c):
return abs(c-o)
def lower_wick_at_least_twice_real_body(o,l,c):
return lower_wick(o,l,c) >= 2 * real_body(o,c)
def is_hammer(row):
return lower_wick_at_least_twice_real_body(row["Open"],row["Low"],row["Close"]) \
and closed_in_top_half_of_range(row["High"],row["Low"],row["Close"])
基本問題:如何將功能映射到列,具體在哪裏,我想引用一個以上的其他列或整行或什麼?
This post涉及將單個來源列的兩個計算列關閉,但不是完全相同。
稍微更高級一點:對於參照多個單條(T)確定的價格模式,我如何從函數定義中引用不同的行(例如T-1,T-2等) ?
非常感謝提前。
還有用,非常感謝。許多方法爲貓和所有皮膚。我會給你一個upvote,但這是我在StackOverflow上的第一個問題,我可惜沒有足夠的代表。 我不認爲你對第二部分有任何想法,即在map/apply函數中引用dataframe中的相鄰行嗎? 再次歡呼。 – ultra909
很好的例子。非常可讀的代碼。 –
出於某種原因,使用'map(f,col1,col2)'的方法比'df.apply(...,axis = 1)'快。映射需要0.35s,df.apply需要26s才能獲得1M行數據幀。任何想法爲什麼? (python 2.7和熊貓0.18.1) – MohamedEzz