序列的真值是不明确的python数据帧
我是新来的。我构建了一个小函数,现在总是出现以下错误: 级数的真值是模糊的。使用a.empty,a.bool(), a、 item()、a.any()或a.all() 我知道这个错误已经在另一个问题中讨论过了,但是我真的不知道我应该做什么不同的事情以及错误是如何发生的 这是我的简单函数:序列的真值是不明确的python数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我是新来的。我构建了一个小函数,现在总是出现以下错误: 级数的真值是模糊的。使用a.empty,a.bool(), a、 item()、a.any()或a.all() 我知道这个错误已经在另一个问题中讨论过了,但是我真的不知道我应该做什么不同的事情以及错误是如何发生的 这是我的简单函数: def relativeWinner(): if df['GoldSummer'] >0 & df['GoldWinter'] >0: df['diff'] = ab
def relativeWinner():
if df['GoldSummer'] >0 & df['GoldWinter'] >0:
df['diff'] = abs(df['GoldSummer'] - df['GoldWinter'])/(df['GoldSummer'] + df['GoldWinter'])
return df['diff'].idxmax()
有谁能告诉我这里出了什么问题以及我将如何解决它吗?至于为什么会出现这个特定问题,请参阅本文: 关于您的代码,请尝试以下方法:
df['diff'] = [abs(tup[0] - tup[1]) / tup[0] if (tup[0] > 0) and (tup[1] > 0) else 'NaN' for tup in zip(df['GoldSummer'], df['GoldWinter'])]
如果df['GoldSummer']或df['GoldWinter']不大于0,会发生什么情况?您可能需要一个“else”语句。请考虑
df['GoldSummer']>0和df['GoldWinter']>0
返回的内容。。。它返回一系列布尔值:[True,True,False,True,False]
。你把这个传递给一个if条件,但是<代码>熊猫> <代码>不知道你想考虑什么样的数组……应该是“代码>真的<代码> >因为它至少有一个<代码>真的<代码>(然后使用<代码>,(或)>代码>,它应该是<代码> false <代码>,因为不是所有的都是<代码>真的< /代码>?(使用all
)。也许您想检查序列是否有任何值(使用.empty
),您可以执行类似if(df['GoldSummer']>0&df['GoldWinter']>0)的操作。all():
@threxx Ah!这一点让我很难受:&
操作符的优先级搞砸了,请明确:如果((df['GoldSummer']>0)和(df['GoldWinter']>0)).all():
换句话说,按位操作符(&
,
,^
)的优先级高于比较操作符(
)因为运算符优先<代码>(df['GoldSummer']>0和df['GoldWinter']>0)0&df['GoldWinter']
首先减少(在本例中,使用矢量化的按位and!),让您可以与另一个系列进行比较!带你回到原来的问题!