循环返回错误,表明序列的真实值不明确

时间:2019-02-14 10:44:16

标签: python pandas loops conditional-statements

我有以下数据集:

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跟踪(最近一次通话最近)    在()中        10        col_list中的col为11:   ---> 12,如果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在   非零(自己)1574提高ValueError(“ {0}的真值不明确。” 1575“使用a.empty,   a.bool(),a.item(),a.any()或a.all()。”   -> 1576 .format(self。 class name ))1577 1578 bool = nonzero

     

ValueError:系列的真值不明确。使用空   a.bool(),a.item(),a.any()或a.all()。

2 个答案:

答案 0 :(得分: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:

    protected override void Seed(ProductsDBContext context)
    {
        Assembly assembly = Assembly.GetExecutingAssembly();
        string resourceName = "WebbApplication.App_Data.SeedData.price_detail.csv";
        using (Stream stream = assembly.GetManifestResourceStream(resourceName))
        {
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                CsvReader csvReader = new CsvReader(reader);
                var products = csvReader.GetRecords<PriceDetail>().ToArray();
                context.PriceDetails.AddOrUpdate(c => c.PriceValueId, products);
            }
        }
    }

我假设您是从“ col_list”列表中排除“国家/地区”列

答案 1 :(得分: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