我需要基于另一个“货币”字段的值将“金额”字段的值转换为美元,但是我不明白为什么在整个数据帧中都会重复第一条记录的值。
这是我的代码:
def calculo_dolar_2(data):
valor = (data*1000)/float(precio_dolar)
return valor
df_conversion_dolar_2['ED'] = df_conversion_dolar_2['Currency'].apply(lambda x: ( df_conversion_dolar_2['Amount'].apply(calculo_dolar_2)) if x=='$$' else df_conversion_dolar_2['Amount'])
df_conversion_dolar_2
我正在尝试其他方式,但没有成功:
precio_dolar = 800
def calculo_dolar_3(data):
if data == '$$':
valor = (df_conversion_dolar_2['Amount']*1000)/float(precio_dolar)
else:
valor = df_conversion_dolar_2['Amount']
return valor
df_conversion_dolar_2['ED'] = df_conversion_dolar_2['Currency'].apply(lambda x: df_conversion_dolar_2['Amount'].apply(calculo_dolar_3))
df_conversion_dolar_2
这是什么原因?
答案 0 :(得分:0)
我还没有测试代码,但这就是我要做的;
# make your code clear (what is 2?)
df = df_conversion_dolar_2
precio_dolar = 800
# first, let's make a boolean selector
dolar_select = df['Currency'] == '$$$'
# Selecting dollar rows at the column Amount is as follow:
# This line is only to show you what happens and is not
# needed in your final code
df.loc[dolar_select, 'Amount']
# Anyway, now we apply your function to the selected data:
df['ED'] = df.loc[dolar_select, 'Amount'].map(lambda x: (x*1000)/float(precio_dolar))
# Finally, fill the NaN values in your dataframe (the non selected rows)
df.loc[df['ED'].isna(), 'ED'] = df['Amount']
答案 1 :(得分:0)
我认为您想要做的事情可以像这样
def calculo_dolar_2(data):
valor = (data*1000)/float(precio_dolar)
return valor
df_conversion_dolar_2['ED'] = df_conversion_dolar_2.apply(lambda x: calculo_dolar_2(x['Amount']) if x['Currency']=='$$' else x['Amount'])