1

I have several df with the same structure. I'd like to create a loop to melt them or create a pivot table.

I tried the following but are not working


my_df = [df1, df2, df3]

for df in my_df:
   df = pd.melt(df, id_vars=['A','B','C'], value_name = 'my_value')

for df in my_df:
   df = pd.pivot_table(df, values = 'my_value', index = ['A','B','C'], columns = ['my_column'])

Any help would be great. Thank you in advance

Matteo
  • 165
  • 1
  • 11

1 Answers1

2

You need assign output to new list of DataFrames:

out = []
for df in my_df:
   df = pd.melt(df, id_vars=['A','B','C'], value_name = 'my_value')
   out.append(df)

Same idea in list comprehension:

out = [pd.melt(df, id_vars=['A','B','C'], value_name = 'my_value') for df in my_df]

If need overwitten origional values in list:

for i, df in enumerate(my_df):
   df = pd.melt(df, id_vars=['A','B','C'], value_name = 'my_value')
   my_df[i] = df

print (my_df)

If need overwrite variables df1, df2, df3:

df1, df2, df3 = [pd.melt(df, id_vars=['A','B','C'], value_name = 'my_value') for df in my_df]
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252