I have two dataframes, the first is this one, created with the following code:
values_to_repeat = [0.33, 0.28, 0.18] df1 = pd.DataFrame({'values_to_repeat':values_to_repeat})
The second one is the following:
values_to_call = [0,1,2,0,0,0] df2 = pd.DataFrame({'values_to_call':values_to_call})
What I need to do is to add a column to the second data frame that contains lists of values taken from the first data frame. I will show it and then explain it with words:
The lists should contain the first value of the column “values_to_repeat” repeated for the value of “values_to_call”, and then in the following 2 rows, it should take the second and the third value, until disappearing in row = (i + 3).
Explaining it row by row:
1) there is an empty list because there is a 0 in “value_to_call”
2) there is [0.33] because there is a 1 in “values_to_call”
3) there is the list [0.28, 0.33, 0.33] where the first value is the value of row number 2 that decreased to 0.28 and then 2 new 0.33 because there is a 2 in “values_to_call”
4) there is the list [0.18, 0.28, 0.28] where the first value is the value of row number 2 that decreased to 0.18 and the other 2 values are the values generated in row number 3 that decreased to 0.28
5) there is the list [0.18, 0.18], now the value generated in row number 2, after decreasing 2 times it disappeard, while the 2 values generated in row number 3 decrease to 0.18
6) there is an empty list because after appearing in i, i+1 and i+2, at i+3 the values generated in row number 3 disappeared as well
Advertisement
Answer
My solution for any “values_to_repeat” and any “values_to_call”>0
import pandas as pd values_to_call = [0,1,2,0,0,0] def cascade(values_to_call): values_to_repeat = [0.33, 0.28, 0.18] list = [] column = [] for i in values_to_call: iteration_list = [] for k in range(i): list.append(values_to_repeat[0]) iteration_list += list # .append(list) doesn't work for some reason :/ while values_to_repeat[-1] in list: list.remove(values_to_repeat[-1]) for k in range(len(list)): list[k]=values_to_repeat[values_to_repeat.index(list[k])+1] column.append(iteration_list) return column result = cascade(values_to_call) data = {'values_to_call':values_to_call,'cascade_values':result} df = pd.DataFrame(data) df.to_csv('link to a file')