在包含比特币价格的数据上,我想衡量一下买家和卖家的实力。
对于在交易中不熟悉的人,我使用一种叫做“日式蜡烛”的价格表示,它考虑到每一行的开盘、收盘价、最高价和最低价:阴影是位于打开或关闭蜡烛与蜡烛顶部(高影子)和蜡烛底部(低阴影)之间的烛台末端。
示例:
我想在原始的dataframe中添加两个将返回每一行的新列:
我的基本思想是:1.创建一个新的对象/dataframe‘df_影子’,它包含一个函数,根据价格的方向计算阴影的大小。2.将此“df_shadow”与包含比特币价格(开放、关闭、高、低)的原始df连接,以获得两个新列。
不幸的是,这不起作用,当然,因为我在编程方面还不是很有经验。
我想要创建一个函数:
def low_shadow(x):
for price in x:
if x['Close'] > x['Open']:
return(x['Open']-x['Low'])
然后只是一个for循环:
for price in df['Close']:
if df['Close']>df['Open']:
print(df['Open']-df['Low']),
else:
print(df['Open']-df['Low'])
那么只是条件:
df['low_shadow'] = [if df['Close'] > df['Open']:
print(df['Open']-df['Low'])]
...but我没有成功。在前两种情况中,我得到了'ValueError:系列的真值是不明确的。使用a.empty、a.bool()、a.item()、a.any()或a.all()。在最后一个例子中,for中的“SyntaxError:无效语法”。如何创建这2列?
发布于 2022-02-22 06:10:20
你们很亲密。在熊猫身上,你可以通过多种方式做到这一点,但有一种方法是:
df['low_shadow'] = df.apply(lambda row: row['Open'] - row['Low']
if row['Close'] > row['Open']
else None,
axis=1)
所以这里发生了什么:df.apply
(带有第二个参数axis=1
)接受一个函数并将它应用到数据帧的每一行,返回一个作为该函数的结果的Series。然后将本系列指定为数据框架中的一个新列。
发布于 2022-02-22 06:08:23
如果我完全理解你的问题,我认为你可以使用lambda
函数。
df['low_shadow'] = df.apply(lambda x: x['Open']-x['Low'] if x['Close'] > x['Open'] else 'enter your value', axis=1)
如果这个答案对你没有帮助,请提供数据和期望的结果的例子。
发布于 2022-02-22 06:27:08
假设'df‘是包含'Open’、' low‘、'High’、'Close‘列的价格数据集,尝试使用以下代码计算低阴影:
def calc_low_shadow(x):
'''
Function to find low shadow of the candle stick
'''
open,close,low = x[0],x[1],x[2]
if close > open:
return open-low
else:
return close - low
df['low_shadow'] = df[['Open','Close','Low']].apply(calc_low_shadow, axis=1)
https://stackoverflow.com/questions/71222512
复制