2017-06-02 106 views
0
f = pd.read_sql_query('SELECT * FROM mydata', engine, index_col='Date') 

f['SMA_100'] = talib.SMA(numpy.asarray(f['Settle']), 100) 
f['SMA_200'] = talib.SMA(numpy.asarray(f['Settle']), 200) 

print(f['SMA_100']) 

2017-05-17 2333.4155 
2017-05-18 2334.4630 
2017-05-19 2335.6780 
Name: SMA_100, dtype: float64 

print(f['SMA_200']) 

2017-05-17 2251.68320 
2017-05-18 2252.73695 
2017-05-19 2253.85945 
Name: SMA_200, dtype: float64 

如何捕獲x和y變量中第二列的值並比較它們。例如:熊貓列對比

if x > y: 
    do something 

其中x和y是第二列的值。我試過了:

if f['SMA_100'] > f['SMA_200']: 
    do something 

但當然這是行不通的。

+0

什麼是「做某事」應該做什麼?操作符合條件的值? – MSeifert

+0

請發佈您的完整腳本。什麼是「pd」(我認爲是熊貓)?什麼是'talib'? – heltonbiker

+0

這與在熊貓中比較列有關,你應該用示例數據發佈一個MCVE https://stackoverflow.com/help/mcve,而不是調用其他用戶無法使用的數據庫,並用' talib' – mgilbert

回答

1

正如@ MSeifert所問,它確實取決於「做某事」的含義。假設你 正在尋找通過看移動的東西我 假設平均創造一些貿易邏輯的結算價格,你可以不喜歡

import pandas as pd 

df = pd.DataFrame({'A':[5, 2, 7],'B':[8,1,3]}, index=['t1', 't2', 't3']) 

idx = df.loc[:, 'A'] > df.loc[:, 'B'] 
df.loc[:,'Trade'] = idx * 10 

print(df) 
    A B Trade 
t1 5 8  0 
t2 2 1  10 
t3 7 3  10 

相反,如果你需要一些路徑依賴的邏輯,你可以去翻 idx的布爾值,例如

for time, istrue in idx.iteritems(): 
    if istrue: 
     print("Doing something at %s" % time) 

Doing something at t2 
Doing something at t3 

當您嘗試

if f['SMA_100'] > f['SMA_200']: 
    pass 

你得到一個錯誤的原因是,這樣做解決了喜歡的東西

if idx: 
    pass 

它要求

print(idx) 
t1 False 
t2  True 
t3  True 
dtype: bool 

是否爲真或假?如ValueError所示, The truth value of a Series is ambiguous.