Pandas专栏比较

时间:2017-06-02 12:25:56

标签: python-3.x pandas

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

但当然没有用。

1 个答案:

答案 0 :(得分: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.