首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何创建返回函数结果的列?

如何创建返回函数结果的列?
EN

Stack Overflow用户
提问于 2022-02-22 13:52:31
回答 3查看 509关注 0票数 0

在包含比特币价格的数据上,我想衡量一下买家和卖家的实力。

对于在交易中不熟悉的人,我使用一种叫做“日式蜡烛”的价格表示,它考虑到每一行的开盘、收盘价、最高价和最低价:阴影是位于打开或关闭蜡烛与蜡烛顶部(高影子)和蜡烛底部(低阴影)之间的烛台末端。

示例:

我想在原始的dataframe中添加两个将返回每一行的新列:

  • 如果价格上涨(看涨的蜡烛)
  • 的阴影的大小,如果价格下跌的话,高阴影的大小(看跌蜡烛)

我的基本思想是:1.创建一个新的对象/dataframe‘df_影子’,它包含一个函数,根据价格的方向计算阴影的大小。2.将此“df_shadow”与包含比特币价格(开放、关闭、高、低)的原始df连接,以获得两个新列。

不幸的是,这不起作用,当然,因为我在编程方面还不是很有经验。

我想要创建一个函数:

代码语言:javascript
运行
复制
def low_shadow(x):
  for price in x:
    if x['Close'] > x['Open']:
      return(x['Open']-x['Low'])

然后只是一个for循环:

代码语言:javascript
运行
复制
for price in df['Close']:
  if df['Close']>df['Open']:
    print(df['Open']-df['Low']),
  else:
    print(df['Open']-df['Low'])

那么只是条件:

代码语言:javascript
运行
复制
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列?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-02-22 14:10:20

你们很亲密。在熊猫身上,你可以通过多种方式做到这一点,但有一种方法是:

代码语言:javascript
运行
复制
 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。然后将本系列指定为数据框架中的一个新列。

票数 1
EN

Stack Overflow用户

发布于 2022-02-22 14: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)

如果这个答案对你没有帮助,请提供数据和期望的结果的例子。

票数 1
EN

Stack Overflow用户

发布于 2022-02-22 14:27:08

假设'df‘是包含'Open’、' low‘、'High’、'Close‘列的价格数据集,尝试使用以下代码计算低阴影:

代码语言:javascript
运行
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71222512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档