For Loop Is Not Working While Appending Rows
I am trying to loop over my dataframe and looking for additional 3 rows for each element in df.con which is only looping over 2nd elementUS and missing UK. Please find the attached
Solution 1:
Each time through the loop, s is re-initialized to a new dataframe on this line:
s = n_df_2.append(bev_child, ignore_index=True)
This makes s end up as the original value of n_df_2, plus only the three values that are appended to it the last time the loop body is executed.
I think this is closer to what you want (nothing before the loop changes):
for country in df.con.unique():
bev_child = n_df_2[(n_df_2['con'].str.contains(country)) & (n_df_2['age group'].str.contains(age_list[0]))]
bev_work = n_df_2[(n_df_2['con'].str.contains(country)) & (n_df_2['age group'].str.contains(age_list[1]))]
bev_old = n_df_2[(n_df_2['con'].str.contains(country)) & (n_df_2['age group'].str.contains(age_list[2]))]
bev_child.loc[:, 'population'] = bev_work.loc[:, 'population'].max() / bev_child.loc[:, 'population'].max()
bev_child.loc[:, 'con'] = country + '-' + new_list[0]
bev_child.loc[:, 'age group'] = new_list[0]
n_df_2 = n_df_2.append(bev_child, ignore_index=True)
bev_child.loc[:, 'population'] = bev_child.loc[:, 'population'].max() + bev_old.loc[:,
'population'].max() / bev_work.loc[:,
'population'].max()
bev_child.loc[:, 'con'] = country + '-' + new_list[2]
bev_child.loc[:, 'age group'] = new_list[2]
n_df_2 = n_df_2.append(bev_child, ignore_index=True)
bev_child.loc[:, 'population'] = bev_old.loc[:, 'population'].max() / bev_work.loc[:, 'population'].max()
bev_child.loc[:, 'con'] = country + '-' + new_list[1]
bev_child.loc[:, 'age group'] = new_list[1]
n_df_2 = n_df_2.append(bev_child, ignore_index=True)
print(n_df_2)
Output:
yearagegroupconpopulation02019(0-14)UK10.012019(14-50)UK20.022019(50+)UK300.032020(0-14)US400.042020(14-50)US1000.052020(50+)US2000.062019 youngvschildUK-youngvschild2.072019 unemployedvsworkingUK-unemployedvsworking17.082019 oldvsyoungUK-oldvsyoung15.092020 youngvschildUS-youngvschild2.5102020 unemployedvsworkingUS-unemployedvsworking4.5112020 oldvsyoungUS-oldvsyoung2.0Note that this only loops through the unique values in df.con, so the loop body only runs twice. Three records are added to the output each time the loop runs. Note also that the output is appended to n_df_2, so there's not need for the variable s.
Post a Comment for "For Loop Is Not Working While Appending Rows"