上篇文章简单介绍了一下加法,乘法,除法贡献度的计算方法,并手动实现了一下过程,文章链接:加法、乘法、除法贡献度计算实现
这篇文章想要把贡献度计算方法封装成一个函数,在传入json输入的时候,自动计算输出结果,其中乘法贡献度的计算方法有做更改,具体如下
一、加载需要的包
import pandas as pd
import numpy as np
import json
二、读取数据(加法,其中A001+A002+A003 = A01)
df_add = pd. read_excel( "C:/Users/supaur/Desktop/value.xlsx" )
df_add
index_num index_name time period value 0 1 A01 2022-08-22 day 1000 1 2 A001 2022-08-22 day 300 2 3 A002 2022-08-22 day 200 3 4 A003 2022-08-22 day 500 4 1 A01 2022-08-21 day 1900 5 2 A001 2022-08-21 day 1000 6 3 A002 2022-08-21 day 500 7 4 A003 2022-08-21 day 400
三、查看传入的加法json并解析出相应的参数
json_file = "C:/Users/supaur/Desktop/add.json"
with open ( json_file, "r" ) as fp:
data = json. load( fp)
print ( data)
date = data[ "date" ]
target1 = data[ "target1" ]
target2 = data[ "target2" ]
target2_1 = data[ "target2_1" ]
target2_2 = data[ "target2_2" ]
type = data[ "type" ]
timetype = data[ "timetype" ]
{'date': ['20220821', '20220822'], 'target1': 'A01', 'target2': ['A001', 'A002', 'A003'], 'target2_1': [], 'target2_2': [], 'type': 'add', 'timetype': 'day'}
四、编写加法贡献度函数
df1_add = df_add[ ( df_add[ "time" ] == date[ 0 ] ) & ( df_add[ "period" ] == timetype) ]
df2_add = df_add[ ( df_add[ "time" ] == date[ 1 ] ) & ( df_add[ "period" ] == timetype) ]
print ( df1_add)
print ( df2_add)
index_num index_name time period value
4 1 A01 2022-08-21 day 1900
5 2 A001 2022-08-21 day 1000
6 3 A002 2022-08-21 day 500
7 4 A003 2022-08-21 day 400
index_num index_name time period value
0 1 A01 2022-08-22 day 1000
1 2 A001 2022-08-22 day 300
2 3 A002 2022-08-22 day 200
3 4 A003 2022-08-22 day 500
df3_add = pd. merge( df1_add, df2_add, how= "inner" , left_on= [ "index_name" ] , right_on= [ "index_name" ] , suffixes= ( "_1" , "_2" ) )
df3_add
index_num_1 index_name time_1 period_1 value_1 index_num_2 time_2 period_2 value_2 0 1 A01 2022-08-21 day 1900 1 2022-08-22 day 1000 1 2 A001 2022-08-21 day 1000 2 2022-08-22 day 300 2 3 A002 2022-08-21 day 500 3 2022-08-22 day 200 3 4 A003 2022-08-21 day 400 4 2022-08-22 day 500
df3_add[ "D_value" ] = df3_add. loc[ : , "value_2" ] - df3_add. loc[ : , "value_1" ]
df3_add
index_num_1 index_name time_1 period_1 value_1 index_num_2 time_2 period_2 value_2 D_value 0 1 A01 2022-08-21 day 1900 1 2022-08-22 day 1000 -900 1 2 A001 2022-08-21 day 1000 2 2022-08-22 day 300 -700 2 3 A002 2022-08-21 day 500 3 2022-08-22 day 200 -300 3 4 A003 2022-08-21 day 400 4 2022-08-22 day 500 100
for i in target2:
df3_add[ "%s_contribution" % i] = round ( df3_add. loc[ df3_add[ "index_name" ] == i, "D_value" ] . tolist( ) [ 0 ] / df3_add. loc[ df3_add[ "index_name" ] == target1, "D_value" ] . tolist( ) [ 0 ] * 100 , 2 )
df3_add
index_num_1 index_name time_1 period_1 value_1 index_num_2 time_2 period_2 value_2 D_value A001_contribution A002_contribution A003_contribution 0 1 A01 2022-08-21 day 1900 1 2022-08-22 day 1000 -900 77.78 33.33 -11.11 1 2 A001 2022-08-21 day 1000 2 2022-08-22 day 300 -700 77.78 33.33 -11.11 2 3 A002 2022-08-21 day 500 3 2022-08-22 day 200 -300 77.78 33.33 -11.11 3 4 A003 2022-08-21 day 400 4 2022-08-22 day 500 100 77.78 33.33 -11.11
def functionadd ( date, target1, target2, timetype) :
df1_add = df_add[ ( df_add[ "time" ] == date[ 0 ] ) & ( df_add[ "period" ] == timetype) ]
df2_add = df_add[ ( df_add[ "time" ] == date[ 1 ] ) & ( df_add[ "period" ] == timetype) ]
df3_add = pd. merge( df1, df2, how= "inner" , left_on= [ "index_name" ] , right_on= [ "index_name" ] , suffixes= ( "_1" , "_2" ) )
df3_add[ "D_value" ] = df3_add. loc[ : , "value_2" ] - df3_add. loc[ : , "value_1" ]
re = [ ]
for i in target2:
df3_add[ "%s_contribution" % i] = round ( df3_add. loc[ df3_add[ "index_name" ] == i, "D_value" ] . tolist( ) [ 0 ] / df3_add. loc[ df3_add[ "index_name" ] == target1, "D_value" ] . tolist( ) [ 0 ] * 100 , 2 )
re. append( ( "%s_contribution" % i, df3_add[ "%s_contribution" % i] . tolist( ) [ 0 ] ) )
return re
print ( functionadd( date, target1, target2, timetype) )
[('A001_contribution', 29.94), ('A002_contribution', 19.97), ('A003_contribution', 49.99)]
五、乘法跟加法类似,再开始加法之前先对各指标求log,变成加法计算
json_file = "C:/Users/supaur/Desktop/times.json"
with open ( json_file, "r" ) as fp:
data = json. load( fp)
print ( data)
date = data[ "date" ]
target1 = data[ "target1" ]
target2 = data[ "target2" ]
target2_1 = data[ "target2_1" ]
target2_2 = data[ "target2_2" ]
type = data[ "type" ]
timetype = data[ "timetype" ]
{'date': ['20220801', '20220901'], 'target1': 'B01', 'target2': ['B001', 'B002'], 'target2_1': [], 'target2_2': [], 'type': 'times', 'timetype': 'month'}
df_times = pd. read_excel( "C:/Users/supaur/Desktop/times.xlsx" )
df_times
index_num index_name time period value 0 1 A01 2022-08-22 day 30000.00 1 2 A001 2022-08-22 day 0.30 2 3 A002 2022-08-22 day 200.00 3 4 A003 2022-08-22 day 500.00 4 1 A01 2022-08-21 day 20000.00 5 2 A001 2022-08-21 day 0.10 6 3 A002 2022-08-21 day 500.00 7 4 A003 2022-08-21 day 400.00 8 1 A01 2022-08-20 day 32000.00 9 2 A001 2022-08-20 day 0.20 10 3 A002 2022-08-20 day 400.00 11 4 A003 2022-08-20 day 400.00 12 5 B01 2022-08-01 month 150000.00 13 6 B001 2022-08-01 month 0.30 14 7 B002 2022-08-01 month 500000.00 15 5 B01 2022-09-01 month 107500.00 16 6 B001 2022-09-01 month 0.25 17 7 B002 2022-09-01 month 430000.00 18 5 B01 2022-10-01 month 185500.00 19 6 B001 2022-10-01 month 0.35 20 7 B002 2022-10-01 month 530000.00
def functiontimes ( date, target1, target2, timetype) :
df1_times = df_times[ ( df_times[ "time" ] == date[ 0 ] ) & ( df_times[ "period" ] == timetype) ]
df2_times = df_times[ ( df_times[ "time" ] == date[ 1 ] ) & ( df_times[ "period" ] == timetype) ]
df3_times = pd. merge( df1_times, df2_times, how= "inner" , left_on= [ "index_name" ] , right_on= [ "index_name" ] , suffixes= ( "_1" , "_2" ) )
df3_times[ "D_value" ] = np. log10( df3_times. loc[ : , "value_2" ] ) - np. log10( df3_times. loc[ : , "value_1" ] )
re = [ ]
for i in target2:
df3_times[ "%s_contribution" % i] = round ( df3_times. loc[ df3_times[ "index_name" ] == i, "D_value" ] . tolist( ) [ 0 ] / df3_times. loc[ df3_times[ "index_name" ] == target1, "D_value" ] . tolist( ) [ 0 ] * 100 , 2 )
re. append( ( "%s_contribution" % i, df3_times[ "%s_contribution" % i] . tolist( ) [ 0 ] ) )
return re
print ( functiontimes( date, target1, target2, timetype) )
[('B001_contribution', 54.73), ('B002_contribution', 45.27)]
六、除法贡献度函数
json_file = "C:/Users/supaur/Desktop/div.json"
with open ( json_file, "r" ) as fp:
data = json. load( fp)
print ( data)
date = data[ "date" ]
target1 = data[ "target1" ]
target2 = data[ "target2" ]
target2_1 = data[ "target2_1" ]
target2_2 = data[ "target2_2" ]
type = data[ "type" ]
timetype = data[ "timetype" ]
{'date': ['20220822', '20220823'], 'target1': 'A01', 'target2': ['A001', 'A002', 'A003'], 'target2_1': ['A001_1', 'A002_1', 'A003_1'], 'target2_2': ['A001_2', 'A002_2', 'A003_2'], 'type': 'div', 'timetype': 'day'}
df_div = pd. read_excel( "C:/Users/supaur/Desktop/div.xlsx" )
df_div
index_num index_name time period value 0 1 A01 2022-08-22 day 0.840546 1 2 A001 2022-08-22 day 0.882581 2 2 A001_1 2022-08-22 day 684.000000 3 2 A001_2 2022-08-22 day 775.000000 4 3 A002 2022-08-22 day 0.732308 5 3 A002_1 2022-08-22 day 714.000000 6 3 A002_2 2022-08-22 day 975.000000 7 4 A003 2022-08-22 day 0.930061 8 4 A003_1 2022-08-22 day 758.000000 9 4 A003_2 2022-08-22 day 815.000000 10 1 A01 2022-08-23 day 0.448011 11 2 A001 2022-08-23 day 0.696589 12 2 A001_1 2022-08-23 day 388.000000 13 2 A001_2 2022-08-23 day 557.000000 14 3 A002 2022-08-23 day 0.415882 15 3 A002_1 2022-08-23 day 309.000000 16 3 A002_2 2022-08-23 day 743.000000 17 4 A003 2022-08-23 day 0.322368 18 4 A003_1 2022-08-23 day 294.000000 19 4 A003_2 2022-08-23 day 912.000000
df1_div = df_div[ ( df_div[ "time" ] == date[ 0 ] ) & ( df_div[ "period" ] == timetype) ]
df2_div = df_div[ ( df_div[ "time" ] == date[ 1 ] ) & ( df_div[ "period" ] == timetype) ]
print ( df1_div)
print ( df2_div)
index_num index_name time period value
0 1 A01 2022-08-22 day 0.840546
1 2 A001 2022-08-22 day 0.882581
2 2 A001_1 2022-08-22 day 684.000000
3 2 A001_2 2022-08-22 day 775.000000
4 3 A002 2022-08-22 day 0.732308
5 3 A002_1 2022-08-22 day 714.000000
6 3 A002_2 2022-08-22 day 975.000000
7 4 A003 2022-08-22 day 0.930061
8 4 A003_1 2022-08-22 day 758.000000
9 4 A003_2 2022-08-22 day 815.000000
index_num index_name time period value
10 1 A01 2022-08-23 day 0.448011
11 2 A001 2022-08-23 day 0.696589
12 2 A001_1 2022-08-23 day 388.000000
13 2 A001_2 2022-08-23 day 557.000000
14 3 A002 2022-08-23 day 0.415882
15 3 A002_1 2022-08-23 day 309.000000
16 3 A002_2 2022-08-23 day 743.000000
17 4 A003 2022-08-23 day 0.322368
18 4 A003_1 2022-08-23 day 294.000000
19 4 A003_2 2022-08-23 day 912.000000
sum_1 = 0
for i in target2_1:
sum_1 = sum_1 + df1_div. loc[ df1_div[ "index_name" ] == i , "value" ] . tolist( ) [ 0 ]
df1_div[ "sum_1" ] = sum_1
df1_div
index_num index_name time period value sum_1 0 1 A01 2022-08-22 day 0.840546 2156.0 1 2 A001 2022-08-22 day 0.882581 2156.0 2 2 A001_1 2022-08-22 day 684.000000 2156.0 3 2 A001_2 2022-08-22 day 775.000000 2156.0 4 3 A002 2022-08-22 day 0.732308 2156.0 5 3 A002_1 2022-08-22 day 714.000000 2156.0 6 3 A002_2 2022-08-22 day 975.000000 2156.0 7 4 A003 2022-08-22 day 0.930061 2156.0 8 4 A003_1 2022-08-22 day 758.000000 2156.0 9 4 A003_2 2022-08-22 day 815.000000 2156.0
sum_2 = 0
for i in target2_2:
sum_2 = sum_2 + df1_div. loc[ df1_div[ "index_name" ] == i , "value" ] . tolist( ) [ 0 ]
df1_div[ "sum_2" ] = sum_2
df1_div
index_num index_name time period value sum_1 sum_2 0 1 A01 2022-08-22 day 0.840546 2156.0 2565.0 1 2 A001 2022-08-22 day 0.882581 2156.0 2565.0 2 2 A001_1 2022-08-22 day 684.000000 2156.0 2565.0 3 2 A001_2 2022-08-22 day 775.000000 2156.0 2565.0 4 3 A002 2022-08-22 day 0.732308 2156.0 2565.0 5 3 A002_1 2022-08-22 day 714.000000 2156.0 2565.0 6 3 A002_2 2022-08-22 day 975.000000 2156.0 2565.0 7 4 A003 2022-08-22 day 0.930061 2156.0 2565.0 8 4 A003_1 2022-08-22 day 758.000000 2156.0 2565.0 9 4 A003_2 2022-08-22 day 815.000000 2156.0 2565.0
df3_div = pd. merge( df1_div, df2_div, how= "inner" , left_on= [ "index_name" ] , right_on= [ "index_name" ] , suffixes= ( "_1" , "_2" ) )
df3_div
index_num_1 index_name time_1 period_1 value_1 sum_1 sum_2 index_num_2 time_2 period_2 value_2 0 1 A01 2022-08-22 day 0.840546 2156.0 2565.0 1 2022-08-23 day 0.448011 1 2 A001 2022-08-22 day 0.882581 2156.0 2565.0 2 2022-08-23 day 0.696589 2 2 A001_1 2022-08-22 day 684.000000 2156.0 2565.0 2 2022-08-23 day 388.000000 3 2 A001_2 2022-08-22 day 775.000000 2156.0 2565.0 2 2022-08-23 day 557.000000 4 3 A002 2022-08-22 day 0.732308 2156.0 2565.0 3 2022-08-23 day 0.415882 5 3 A002_1 2022-08-22 day 714.000000 2156.0 2565.0 3 2022-08-23 day 309.000000 6 3 A002_2 2022-08-22 day 975.000000 2156.0 2565.0 3 2022-08-23 day 743.000000 7 4 A003 2022-08-22 day 0.930061 2156.0 2565.0 4 2022-08-23 day 0.322368 8 4 A003_1 2022-08-22 day 758.000000 2156.0 2565.0 4 2022-08-23 day 294.000000 9 4 A003_2 2022-08-22 day 815.000000 2156.0 2565.0 4 2022-08-23 day 912.000000
df3_div[ "D_value" ] = df3_div. loc[ : , "value_2" ] - df3_div. loc[ : , "value_1" ]
df3_div
index_num_1 index_name time_1 period_1 value_1 sum_1 sum_2 index_num_2 time_2 period_2 value_2 D_value 0 1 A01 2022-08-22 day 0.840546 2156.0 2565.0 1 2022-08-23 day 0.448011 -0.392535 1 2 A001 2022-08-22 day 0.882581 2156.0 2565.0 2 2022-08-23 day 0.696589 -0.185992 2 2 A001_1 2022-08-22 day 684.000000 2156.0 2565.0 2 2022-08-23 day 388.000000 -296.000000 3 2 A001_2 2022-08-22 day 775.000000 2156.0 2565.0 2 2022-08-23 day 557.000000 -218.000000 4 3 A002 2022-08-22 day 0.732308 2156.0 2565.0 3 2022-08-23 day 0.415882 -0.316426 5 3 A002_1 2022-08-22 day 714.000000 2156.0 2565.0 3 2022-08-23 day 309.000000 -405.000000 6 3 A002_2 2022-08-22 day 975.000000 2156.0 2565.0 3 2022-08-23 day 743.000000 -232.000000 7 4 A003 2022-08-22 day 0.930061 2156.0 2565.0 4 2022-08-23 day 0.322368 -0.607693 8 4 A003_1 2022-08-22 day 758.000000 2156.0 2565.0 4 2022-08-23 day 294.000000 -464.000000 9 4 A003_2 2022-08-22 day 815.000000 2156.0 2565.0 4 2022-08-23 day 912.000000 97.000000
sum = 0
for ( a , i , j) in zip ( target2, target2_1, target2_2) :
df3_div[ "%s_contribution" % a] = ( df3_div. loc[ df3_div[ "index_name" ] == i, "sum_1" ] . tolist( ) [ 0 ] + df3_div. loc[ df3_div[ "index_name" ] == i, "D_value" ] . tolist( ) [ 0 ] ) / ( df3_div. loc[ df3_div[ "index_name" ] == j, "sum_2" ] . tolist( ) [ 0 ] + df3_div. loc[ df3_div[ "index_name" ] == j, "D_value" ] . tolist( ) [ 0 ] ) - df3_div. loc[ df3_div[ "index_name" ] == target1, "value_1" ] . tolist( ) [ 0 ]
sum = sum + df3_div[ "%s_contribution" % a]
df3_div[ "sum" ] = sum
df3_div
index_num_1 index_name time_1 period_1 value_1 sum_1 sum_2 index_num_2 time_2 period_2 value_2 D_value A001_contribution A002_contribution A003_contribution sum 0 1 A01 2022-08-22 day 0.840546 2156.0 2565.0 1 2022-08-23 day 0.448011 -0.392535 -0.048045 -0.09001 -0.204933 -0.342988 1 2 A001 2022-08-22 day 0.882581 2156.0 2565.0 2 2022-08-23 day 0.696589 -0.185992 -0.048045 -0.09001 -0.204933 -0.342988 2 2 A001_1 2022-08-22 day 684.000000 2156.0 2565.0 2 2022-08-23 day 388.000000 -296.000000 -0.048045 -0.09001 -0.204933 -0.342988 3 2 A001_2 2022-08-22 day 775.000000 2156.0 2565.0 2 2022-08-23 day 557.000000 -218.000000 -0.048045 -0.09001 -0.204933 -0.342988 4 3 A002 2022-08-22 day 0.732308 2156.0 2565.0 3 2022-08-23 day 0.415882 -0.316426 -0.048045 -0.09001 -0.204933 -0.342988 5 3 A002_1 2022-08-22 day 714.000000 2156.0 2565.0 3 2022-08-23 day 309.000000 -405.000000 -0.048045 -0.09001 -0.204933 -0.342988 6 3 A002_2 2022-08-22 day 975.000000 2156.0 2565.0 3 2022-08-23 day 743.000000 -232.000000 -0.048045 -0.09001 -0.204933 -0.342988 7 4 A003 2022-08-22 day 0.930061 2156.0 2565.0 4 2022-08-23 day 0.322368 -0.607693 -0.048045 -0.09001 -0.204933 -0.342988 8 4 A003_1 2022-08-22 day 758.000000 2156.0 2565.0 4 2022-08-23 day 294.000000 -464.000000 -0.048045 -0.09001 -0.204933 -0.342988 9 4 A003_2 2022-08-22 day 815.000000 2156.0 2565.0 4 2022-08-23 day 912.000000 97.000000 -0.048045 -0.09001 -0.204933 -0.342988
for b in target2:
df3_div[ "%s_nor_contribution" % b] = round ( df3_div. loc[ df3_div[ "index_name" ] == b, "%s_contribution" % b] . tolist( ) [ 0 ] / df3_div. loc[ df3_div[ "index_name" ] == b, "sum" ] . tolist( ) [ 0 ] * 100 , 2 )
df3_div
index_num_1 index_name time_1 period_1 value_1 sum_1 sum_2 index_num_2 time_2 period_2 value_2 D_value A001_contribution A002_contribution A003_contribution sum A001_nor_contribution A002_nor_contribution A003_nor_contribution 0 1 A01 2022-08-22 day 0.840546 2156.0 2565.0 1 2022-08-23 day 0.448011 -0.392535 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 1 2 A001 2022-08-22 day 0.882581 2156.0 2565.0 2 2022-08-23 day 0.696589 -0.185992 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 2 2 A001_1 2022-08-22 day 684.000000 2156.0 2565.0 2 2022-08-23 day 388.000000 -296.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 3 2 A001_2 2022-08-22 day 775.000000 2156.0 2565.0 2 2022-08-23 day 557.000000 -218.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 4 3 A002 2022-08-22 day 0.732308 2156.0 2565.0 3 2022-08-23 day 0.415882 -0.316426 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 5 3 A002_1 2022-08-22 day 714.000000 2156.0 2565.0 3 2022-08-23 day 309.000000 -405.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 6 3 A002_2 2022-08-22 day 975.000000 2156.0 2565.0 3 2022-08-23 day 743.000000 -232.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 7 4 A003 2022-08-22 day 0.930061 2156.0 2565.0 4 2022-08-23 day 0.322368 -0.607693 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 8 4 A003_1 2022-08-22 day 758.000000 2156.0 2565.0 4 2022-08-23 day 294.000000 -464.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75 9 4 A003_2 2022-08-22 day 815.000000 2156.0 2565.0 4 2022-08-23 day 912.000000 97.000000 -0.048045 -0.09001 -0.204933 -0.342988 14.01 26.24 59.75
def functiondiv ( date, target1, target2, target2_1, target2_2, timetype) :
df1_div = df_div[ ( df_div[ "time" ] == date[ 0 ] ) & ( df_div[ "period" ] == timetype) ]
df2_div = df_div[ ( df_div[ "time" ] == date[ 1 ] ) & ( df_div[ "period" ] == timetype) ]
sum_1 = 0
for i in target2_1:
sum_1 = sum_1 + df1_div. loc[ df1_div[ "index_name" ] == i , "value" ] . tolist( ) [ 0 ]
df1_div[ "sum_1" ] = sum_1
sum_2 = 0
for i in target2_2:
sum_2 = sum_2 + df1_div. loc[ df1_div[ "index_name" ] == i , "value" ] . tolist( ) [ 0 ]
df1_div[ "sum_2" ] = sum_2
df3_div = pd. merge( df1_div, df2_div, how= "inner" , left_on= [ "index_name" ] , right_on= [ "index_name" ] , suffixes= ( "_1" , "_2" ) )
df4_div = df3_div. loc[ : , [ "index_num_1" , "index_name" , "time_1" , "time_2" , "period_1" , "value_1" , "value_2" , "sum_1" , "sum_2" ] ]
df4_div[ "D_value" ] = df4_div. loc[ : , "value_2" ] - df4_div. loc[ : , "value_1" ]
sum = 0
for ( a , i , j) in zip ( target2, target2_1, target2_2) :
df4_div[ "%s_contribution" % a] = ( df4_div. loc[ df4_div[ "index_name" ] == i, "sum_1" ] . tolist( ) [ 0 ] + df4_div. loc[ df4_div[ "index_name" ] == i, "D_value" ] . tolist( ) [ 0 ] ) / ( df4_div. loc[ df4_div[ "index_name" ] == j, "sum_2" ] . tolist( ) [ 0 ] + df4_div. loc[ df4_div[ "index_name" ] == j, "D_value" ] . tolist( ) [ 0 ] ) - df4_div. loc[ df4_div[ "index_name" ] == target1, "value_1" ] . tolist( ) [ 0 ]
sum = sum + df4_div[ "%s_contribution" % a]
df4_div[ "sum" ] = sum
re = [ ]
for b in target2:
df4_div[ "%s_nor_contribution" % b] = round ( df4_div. loc[ df4_div[ "index_name" ] == b, "%s_contribution" % b] . tolist( ) [ 0 ] / df4_div. loc[ df4_div[ "index_name" ] == b, "sum" ] . tolist( ) [ 0 ] * 100 , 2 )
re. append( ( "%s_nor_contribution" % b, df4_div[ "%s_nor_contribution" % b] . tolist( ) [ 0 ] ) )
return re
print ( functiondiv( date, target1, target2, target2_1, target2_2, timetype) )
[('A001_nor_contribution', 14.01), ('A002_nor_contribution', 26.24), ('A003_nor_contribution', 59.75)]