我有以下数据集:
我想告诉熊猫:
如果报告号小于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()。
答案 0 :(得分:0)
您可能要使用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