使用以下Pandas DataFrame,我将如何创建一个新列,"花费"例如,基于另一列中的函数名称?
示例数据集
cost method metric rate total planned
0 CPMV 2000 100 1000
1 CPMV 4000 100 1000
2 Flat 0 0 1000
3 Flat 0 0 0
4 Free 1 2 3
我需要根据成本法计算成本。
答案 0 :(得分:1)
这可以通过首先设置功能字典来实现。键将是计算的名称和值。然后,在apply函数中使用lambda,您可以通过选择成本方法来确定要使用哪个键的函数。
使用safe_div函数计算flight_length为0将返回total_planned而不是错误。
# make safe_div
def safe_div(x,y):
if y == 0:
return x
return x / y
# write the dictionary
def applyCalculateSpend (df_name, cost_method_col, metric_col, rate_col, total_planned_col):
calculations = {
'CPMV' : df_name[metric_col] / 1000 * df_name[rate_col],
'Flat' : safe_div(df_name[total_planned_col], flight_week_diff),
'Free' : 0
}
df_method = df_name[cost_method_col]
return calculations.get(df_method, "not in dict")
# call the function inside a lambda
test_df['spend'] = test_df.apply(lambda row: applyCalculateSpend(
row,
cost_method_col='cost method',
metric_col='metric',
rate_col='rate',
total_planned_col='total planned'), axis = 1)
cost method metric rate total planned spend
0 CPMV 2000 100 1000 200.0
1 CPMV 4000 100 1000 400.0
2 Flat 0 0 1000 500.0
3 Flat 0 0 0 0.0
4 Free 1 2 3 0.0