Home > OS >  populate column in dataframe with a list using for loop
populate column in dataframe with a list using for loop

Time:12-07

I would like to populate a dataframe using a for loop. one of the column is a list. this list is empty at the begining at each itteration an element is added or removed from it.

when I print my list at each iteration I am getting the right results, but when I print my dataframe, I am getting the same list on each row:

I you have a look to my code the list I am updatin is list_employe. The magic should happen in the 3 last rows but it did not.

Does anyone have an idea why the list is updated in one way and the dataframe record only the last update on all rows

list_employe = []
total_employe = 0
rows=[]



shiftday = example['SHIFT_DATE'].dt.strftime('%Y-%m-%d').unique().tolist()

for i in shiftday:
    shift_day = example[example['SHIFT_DATE'] == i]
    list_employe_shift = example[example['SHIFT_DATE']==i]['EMPLOYEE_CODE_POS_UPPER'].unique().tolist()
    new_employe = 0
    end_employe = 0
    
    for k in list_employe_shift:
        shift_days_emp = shift_day[shift_day['EMPLOYEE_CODE_POS_UPPER'] == k]
        days = shift_days_emp.iloc[0]['last_day']
        #print(days)
        if k in list_employe:
            if days>1:
                end_employe= end_employe 1
                total_employe = total_employe-1
                list_employe.remove(k)
        else:
            new_employe = new_employe 1
            total_employe = total_employe   1
            list_employe.extend([k])
            
    day = i
    total_emp = total_employe
    new_emp = new_employe
    end_emp = end_employe
    rows.append([day, total_emp, new_emp, end_emp, list_employe])
    print(list_employe)
df = pd.DataFrame(rows, columns=["day", "total_employe", "new_employe", "end_employe", "list_employe"])

CodePudding user response:

the list list_employe is always the same object that you append to the list rows. What you need to do to solve the problem is at the 3rd line from the bottom : rows.append([day, total_emp, new_emp, end_emp, list(list_employe)])
Which create a new list at each itteration

  • Related