当前位置: 首页 > 知识库问答 >
问题:

DataFrame列比较会引发ValueError:Series的真值不明确。[重复]

丁景山
2023-03-14

我试图比较两列,以查看一个值是否大于另一个值,但我一直得到一个ValueError:

ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()

以下是引发错误的部分:

if (cleanedData['Roll Price (Spread)'] > cleanedData['Delta VWAP']): 
    cleanedData["Result"] = "Long"
else: 
    cleanedData["Result"] = "Short"

我怎样才能解决这个问题?

共有1个答案

洪高阳
2023-03-14

以下是重现此错误的方法:

df = pd.DataFrame({'Roll Price': np.random.randint(1, 10, 10), 
                   'Delta VWAP': np.random.randint(1, 10, 10)})

df
Out: 
   Delta VWAP  Roll Price
0           7           6
1           9           1
2           9           4
3           2           4
4           7           8
5           8           4
6           8           6
7           9           3
8           2           5
9           6           8

if df['Roll Price'] > df['Delta VWAP']:
    df['Result'] = 'Long'

Traceback (most recent call last):

  File "<ipython-input-18-a07b1f06bd42>", line 1, in <module>
    if df['Roll Price'] > df['Delta VWAP']:

  File "/home/ayhan/anaconda3/lib/python3.5/site-packages/pandas/core/generic.py", line 955, in __nonzero__
    .format(self.__class__.__name__))

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

错误源于此比较:df['Roll Price']

df['Roll Price'] > df['Delta VWAP']
Out: 
0    False
1    False
2    False
3     True
4     True
5    False
6    False
7    False
8     True
9     True
dtype: bool

您可以看到,结果不是一个TrueFalse值,而是一个布尔值数组。模棱两可的部分是

  • 当数组中的所有值都为真时,是否要将列设置为Long
  • 当数组中的任何值为True时,是否要将列设置为Long

事实证明,答案是两者都不是。您希望进行元素级比较,并在满足条件时将相应的值设置为Long,否则设置为短期

为此,您可以使用np.where

cond = df['Roll Price'] > df['Delta VWAP']

df['Result'] = np.where(cond, 'Long', 'Short')

df
Out: 
   Delta VWAP  Roll Price Result
0           7           6  Short
1           9           1  Short
2           9           4  Short
3           2           4   Long
4           7           8   Long
5           8           4  Short
6           8           6  Short
7           9           3  Short
8           2           5   Long
9           6           8   Long

 类似资料:
  • 我是熊猫的新手。我有以下熊猫数据框,其中包含以下值: 我想比较df为:-假设我有一个time_argument是。我想将结果存储在另一个中 我尝试使用以下方法: 但是我没有得到想要的答案。 希望我清楚这个问题。

  • 问题内容: 我知道以前曾有人问过这个问题,但是当我尝试发表声明时却遇到错误。我查看了此链接,但对我而言并没有太大帮助。我是DataFrames的列表。 我正在尝试以下, 给出以下错误: ValueError:系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。 和 我尝试以下,并得到同样的错误。 我的数据类型是。我没有使用任何其他运算符和或。在

  • 问题内容: 我在db中有类型的字段。我使用PostgreSQL。和查询 不返回行中的值是。 但是例如查询 正常工作。 如何解决此问题并获取行? 问题答案: 要 解决 您的问题,请改用数据类型 ,该数据类型不是浮点类型,而是任意精度类型。 如果将数字文字 输入到(相同的单词,不同的含义)列中,则会存储 确切的 数量- 与a或column列不同,在该列中,值被强制为下一个可能的二进制近似值。这可能是正

  • 我想在dataframe a中添加一列, ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。

  • 我的列表中有这样一个< code>compareTo代码: 当我使用时,我得到以下错误: 当我将其更改为<code>if(this.long1 现在,重复确实发生了,需要正确排序。重复项是出现在第一个还是最后一个并不重要,只要它们按顺序正确分组,如下所示: 我该如何正确地做到这一点?谢谢你。 更新 该列表仍在按以下所有建议排序。这是因为它是一个

  • 问题内容: 我有以下Pandas DataFrame,我想创建另一列来比较col1的前一行,以查看它们是否相等。最好的方法是什么?就像下面的DataFrame。谢谢 问题答案: 您需要使用: 或改为使用,但是在大型DataFrame中,它会稍微慢一些: 时间 :