循环返回错误,系列的真值是不明确的

问题描述 投票:1回答:2

我有以下数据集:

enter image description here

我想告诉大熊猫:

如果报告编号低于30,他需要创建一个等于的新变量

df_bei_index [col] * 0.05 + df_bei_index ['PDI_Average'] * 0.95。

如果报告编号高于或等于30,则需要创建一个等于的新变量

df_bei_index [COL]

我写了以下代码:

for col in col_list:
    if df_bei_index['Report No'] <= 29:
        df_bei_index[col+'_final'] = df_bei_index[col]*0.05 + df_bei_index['PDI_Average']*0.95
    else:
        df_bei_index[col+'_final'] = df_bei_index[col]

但是我得到了这个错误


ValueError Traceback(最近一次调用last)in()10 11 col for col_list:---> 12 if df_bei_index ['Report No'] <= 29:13 df_bei_index [col +'_ final'] = df_bei_index [col] * 0.05 + df_bei_index ['PDI_Average'] * 0.95 14其他:

〜\ Anaconda3 \ lib \ site-packages \ pandas \ core \ generic.py in nonzero(self)1574引发ValueError(“{0}的真值是不明确的。”1575“使用a.empty,a.bool( ),a.item(),a.any()或a.all()。“ - > 1576 .format(self.class.name))1577 1578 bool =非零

ValueError:Series的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

python pandas loops condition
2个回答
0
投票

检查这个答案:Python Use if function: ValueError:Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

您可能想要使用np.where:

for col in col_list:
        df_bei_index[col+'_final'] = np.where(df_bei_index['Report No'] <=29, df_bei_index[col]*0.05 + df_bei_index['PDI_Average']*0.95, df_bei_index[col])

我假设您从“col_list”列表中排除了“Country”列


0
投票

df_bei_index['Report No'] <= 29这样的表达式有Series(bool)类型,所以你不能在if语句中使用它,但你可以在.loc中将它用作数据帧的索引:

import pandas as pd

data = {'a': list(range(20)), 'b': list(range(6,26))}
df = pd.DataFrame(data = data)

condition1 = df.a <= 10
condition2 = df.a > 10
df.loc[condition1, 'a_1'] = df.loc[condition1]['a'] * 2
df.loc[condition2, 'a_1'] = df.loc[condition2]['a'] * 5
© www.soinside.com 2019 - 2024. All rights reserved.