用Pandas计算lambda的问题

2024-10-06 12:37:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的密码:

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

原因是什么


Tags: lambdadfdatareturndeffloatamountcurrency
2条回答

我认为你想做的事情可以像这样完成

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'])

我还没有测试代码,但我会这样做

# 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']

相关问题 更多 >