用熊猫计算lambda问题

时间:2020-06-02 01:18:45

标签: python pandas lambda

我需要基于另一个“货币”字段的值将“金额”字段的值转换为美元,但是我不明白为什么在整个数据帧中都会重复第一条记录的值。

这是我的代码:

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

capture

我正在尝试其他方式,但没有成功:

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

这是什么原因?

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'])
相关问题