我有第一个数据帧df:
cur_cost_id cur_sales_id product_description
date_facture
2020-01-01 00:20:09 2 1 io
2020-01-01 00:25:12 2 2 io
2020-01-01 00:25:35 2 1 io
2020-01-01 00:25:50 2 4 io
2020-01-01 00:25:52 2 2 io
使用以下有关汇率的其他数据框,我创建了平均平均值:
avg=df.mean(axis=1)
2020-05-27 2020-04-23 2020-06-12 2020-03-31 2020-03-30 2020-06-19 \
AUD 1.507142 1.570553 1.454972 1.639923 1.633225 1.450580
BGN 1.779456 1.815633 1.730184 1.785141 1.772521 1.744692
EUR 5.338823 5.446157 5.076787 5.202720 5.121533 5.354951
我尝试在第一个数据帧中添加一列,以便如果cur_sales_id=1
,则新列中的值为avg['EUR']
。
我尝试过这个:
def taux_change(row):
if row['cur_sales_id'] == 1:
val = avg['EUR']
return val
df['Taux_change'] = df.apply(taux_change, axis=1)
但是我有这个错误:
(“分配前引用了局部变量'val','发生在 索引2020-01-01 00:20:09')
有人可以向我解释为什么?
答案 0 :(得分:1)
def taux_change(row):
if row['cur_sales_id'] == 1:
val = avg['EUR']
return val
df['Taux_change'] = df.apply(taux_change, axis=1)
您应该在行return val
上加上一个制表符,因为它从函数中返回val。否则,它将像正常的代码流。
答案 1 :(得分:1)
在函数中,如果row['cur_sales_id'] != 1
,则不会为val赋值。
编写函数的更好方法是
def taux_change(row):
if row['cur_sales_id'] == 1:
val = avg['EUR']
else:
val = None
return val
df['Taux_change'] = df.apply(taux_change, axis=1)
另一种方法是:
df.loc[df['cur_sales_id'] == 1,'Taux_change'] = avg['EUR']
甚至更好的是使用map函数并创建平均汇率avg_xr_dict
的字典,然后:
df["Taux_change"] = df["cur_sales_id"].map(avg_xr_dict)