如何计算相对价值再平衡的 if 语句/错误:“系列的真值不明确”

2023-12-07

下面是我编写的代码,用于计算 df.a 和 df.b 值的相对变化,而 df 是一个数据帧。基本上需要计算的是df["c"] = df.a/df.a.iloc[df.d].values。 df.d 设置为等于 df.t 如果df.a/df.a.iloc[df.d].values大于或小于df.b/df.b.iloc[df.d].values * (1+ tolerance)

问题是该代码目前带来以下错误代码:ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', u'occurred at index 2011-01-01 00:00:00')我完全不知道为什么......

import pandas as pd
import numpy as np
import datetime

randn = np.random.randn
rng = pd.date_range('1/1/2011', periods=10, freq='D')

df = pd.DataFrame({'a': [1.1, 1.2, 2.3, 1.4, 1.5, 1.8, 0.7, 1.8, 1.9, 2.0], 'b': [1.1, 1.5, 1.3, 1.6, 1.5, 1.1, 1.5, 1.7, 2.1, 2.1],'c':[None] * 10},index=rng)

df["d"]= [0,0,0,0,0,0,0,0,0,0]
df["t"]= np.arange(len(df))
tolerance = 0.3

def set_t(x):
    if df.a/df.a.iloc[df.d].values < df.b/df.b.iloc[df.d].values * (1+tolerance):
        return  df.iloc[df.index.get_loc(x.name) - 1]['d'] == df.t
    elif df.a/df.a.iloc[df.d].values > df.b/df.b.iloc[df.d].values * (1+tolerance):
        return df.iloc[df.index.get_loc(x.name) - 1]['d'] == df.t

#The conditions in part one are exactly the same as in part 2, only first it says smaller than, and in the second part is bigger than df.b/df.b.iloc[df.d].values * (1+tolerance)


df['d'] = df.apply(set_t, axis =1)

#df["d"]= [0,0,0,3,3,3,6,7,7,7] this should be the coutcome for d

df["c"] = df.a/df.a.iloc[df.d].values 

应用(df.a/df.a.iloc[df.d].values).all() < (df.b/df.b.iloc[df.d].values).all() or .any()不会导致预期的结果,因为它只检查当前设置的数据何时为 TRUE 或 FALSE,但不会设置新值。

期望的结果如下所示:

              a    b         c  d  t
2011-01-01  1.1  1.1  1.000000  0  0
2011-01-02  1.2  1.5  1.090909  0  1
2011-01-03  2.3  1.3  2.090909  0  2
2011-01-04  1.4  1.6  1.000000  3  3
2011-01-05  1.5  1.5  1.071429  3  4
2011-01-06  1.8  1.1  1.285714  3  5
2011-01-07  0.7  1.5  1.000000  6  6
2011-01-08  1.8  1.7  1.000000  7  7
2011-01-09  1.9  2.1  1.055556  7  8
2011-01-10  2.0  2.1  1.111111  7  9

有什么想法如何解决这个问题吗?


这不是 100% 的解决方案,但至少应该让您走上一条更好的道路并解决主要问题。我从语法方面看到的核心问题是您试图混合矢量化和非矢量化代码。你可以做一些更像这样的事情:

>>> df['d1'] = df.a/df.a.iloc[df.d].values > df.b/df.b.iloc[df.d].values * (1+tolerance)

>>> df['d2'] = df.a/df.a.iloc[df.d].values * (1+tolerance) < df.b/df.b.iloc[df.d].values

>>> df['d'] = df['d1'] | df['d2']

>>> df

              a    b     c      d  t     d1     d2
2011-01-01  1.1  1.1  None  False  0  False  False
2011-01-02  1.2  1.5  None  False  1  False  False
2011-01-03  2.3  1.3  None   True  2   True  False
2011-01-04  1.4  1.6  None  False  3  False  False
2011-01-05  1.5  1.5  None  False  4  False  False
2011-01-06  1.8  1.1  None   True  5   True  False
2011-01-07  0.7  1.5  None   True  6  False   True
2011-01-08  1.8  1.7  None  False  7  False  False
2011-01-09  1.9  2.1  None  False  8  False  False
2011-01-10  2.0  2.1  None  False  9  False  False

这并不是您想要的答案,但希望向您展示代码发生了什么以及如何修复它以获得您想要的东西(即您不需要或不想使用函数并在此处应用它,只需使用标准 pandas 矢量化代码)。

如果你能让它发挥作用,更干净的方法是np.where(其中两个连续或嵌套)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何计算相对价值再平衡的 if 语句/错误:“系列的真值不明确” 的相关文章

随机推荐

  • 如何比较 Excel 单元格中的文本以查看是否找到相同的单词?

    我有几行 Excel 单元格 其中包含一串单词 所有单词均以逗号分隔 我想将每个单元格与另一个单元格进行比较 以检查是否有任何单词匹配 重复 例如 单元格 A1 dog cat rabbit mouse lion bear tiger单元格
  • C 中多个数组的笛卡尔积

    我能够在 C 中实现静态数组数量的笛卡尔积 但是我想动态构建一个代码 获取输入数组的数量 有人可以阐明如何 仅使用数组 来做到这一点 如果不可能对于数组 请建议我其他解决方案 谢谢 下面是我的 3 个数组的笛卡尔积的代码 include
  • Magento 产品等级价格在产品图片更新时被删除

    我创建了一个脚本来以编程方式更新我的产品图片 但我的脚本删除了所有 tier prices product gt save 这是我的图像更新脚本 foreach productCollection as product formatted
  • 设置 ORACLE_HOME 的正确方法?

    在 OS X 上 我的 ORACLE HOME 环境变量应该是 usr local oracle or usr local oracle instantclient 10 2 它应该设置为包含您的 bin 目录的目录的值 在您的情况下 我认
  • 如何使用经典 ASP 保存画布图像?

    我有点卡在这里 我知道我可以使用 canvas toDataURL 生成一个 base64 编码的字符串 以传递到我的服务器上的经典 ASP 页面 但我似乎找不到答案的问题是如何处理这些数据 以便我可以将其保存在服务器上的某个位置 因此 通
  • 在谷歌地图叠加层中使用 d3 绘制路径

    我将 d3 js 与谷歌地图一起使用 徒劳地尝试可视化无线覆盖范围 基本思想是地图上的每个点都代表一个接入点 我将使用这些点的 voronoi 图作为覆盖范围等的粗略近似值 所以基于此demo 我有以下内容
  • javascript 事件不适用于使用 json 添加的动态内容

    我陷入了这样一种情况 我的 DOM 元素是基于动态生成的 getJSON该元素的 Javascript 函数不起作用 我将在我的代码中发布一些总体想法 因为我只是在寻找在这种情况下应该做什么的方向 site js包含一般功能 例如 docu
  • 单击按钮启动计时器

    我是 Android 编程新手 但我了解 Java 我的问题是 Android 中的计时器如何工作 我读过最好使用处理程序 我想做的是 您单击一个按钮 计时器就会启动 到单击按钮的那一刻 我一切都清楚了 但如何启动计时器 Android 中
  • 如何在Oracle中拆分逗号分隔的字符串[重复]

    这个问题在这里已经有答案了 如何在Oracle中使用分割逗号分隔的字符串SUBSTR and INSTR 字符串 20 4 12 5 3 5 0 2 0 2 我尝试使用下面的代码 但无法获取第二个逗号后的值 SELECT substr 20
  • C++\GLUT 窗口菜单栏

    我正在编写一个简单的过剩应用程序 我的老师希望我创建一个顶部菜单栏 就像在任何 Windows 应用程序中一样 你知道 文件 编辑等 窗口顶部的标尺 我查看了过剩的文档并用谷歌搜索 我所能找到的只是一个用鼠标右键打开的弹出菜单 不是定义的内
  • Logcat 日志警告/错误

    当我通过 ADB 连接我的 Galaxy s3 mini 并尝试使用 android studio 调试应用程序时 我在 logcat 中收到无尽的错误 警告消息 不间断的消息变得疯狂 这正常吗 通常使用模拟器时 我不会在 logcat 中
  • php的sqlsrv库有类似mysql_real_escape_string的函数吗? [复制]

    这个问题在这里已经有答案了 我正在寻找类似的功能mysql real escape string为了SQLSRV图书馆 具体来说 我很难转义单引号 而不是逃避 像mysql您可以在另一个单引号前面使用一个单引号作为转义方法 我正在努力想出一
  • 循环/反映所有 EF 模型中的所有属性以设置列类型

    我的客户有一个使用decimal 13 4 规范存储SQL Server 小数的标准 结果 在一个非常大且仍在增长的模式中 我有近一百个这样的语句 builder Entity
  • 如何防止窗户被移动?

    我将如何阻止表格被移动 我将表单边框样式设置为 固定单一 并希望保持这种方式 因为它在 vista 中看起来不错 看看这个link 您可能对选项 3 感兴趣 它将要求您包装一些本机代码 但应该可以工作 链接底部还有一条评论 显示了一种更简单
  • Xamarin Forms 日期和时间选择器

    我正在使用 Xamarin Forms 制作跨平台应用程序 我需要创建用户可以选择日期和时间的简单视图 类似于 我要创建的视图我在这里找到的 Xamarin iOS 中的选择器 Android 的解决方案已准备就绪 但我需要在同一应用程序中
  • 如何测试反射得到的Java字段的值是否为null?

    I have Field f this getClass getFields 0 我需要知道是否f的值在this is null或不 有很多方法 例如getInt and getDouble 但我还没有找到类似的方法Object getDa
  • 如何在WP7 / WP8中向本地html页面传递参数?

    有谁知道如何将 url 参数传递到 Web 浏览器控件中的本地页面 当您单独导航到该页面时 Html MyPage html 一切都很好 但是一旦添加参数 Html MyPage html Message Hello 我收到一个错误页面 指
  • 使用struts2和Ajax下载文件时如何放置进度条

    我无法放置进度条 因为它直接重定向页面并下载文件 这么多问题 其中大部分是隐含的 集中在一个问题中 使用struts2和Ajax下载文件时如何放置进度条 如果不需要 不要使用AJAX下载 当您在浏览器中打开文件时 contentDispos
  • 我们可以在棒棒糖设备中显示旧式时间选择器(Pre Lollipop Time Picker)

    我想在棒棒糖设备中显示较旧的时间选择器 例如棒棒糖设备之前的时间选择器 可以 这个是可以的 您可以通过将 timePickerMode 属性设置为 spinner 来指定微调器样式的时间选择器 材质的默认值为 clock
  • 如何计算相对价值再平衡的 if 语句/错误:“系列的真值不明确”

    下面是我编写的代码 用于计算 df a 和 df b 值的相对变化 而 df 是一个数据帧 基本上需要计算的是df c df a df a iloc df d values df d 设置为等于 df t 如果df a df a iloc