name/save data frames that are currently in a dictionary in a for loop pandas

Viewed 22

I have a dictionary of dataframes (the key is the name of the data frame and the value is the rows/columns). Each dataframe within the dictionary has just 2 columns and varying numbers of rows. I also have a list that has all of the keys in it.

I need to use a for-loop to iteratively name each dataframe with the key and have it saved outside of the dictionary. I know I can access each data frame using the dictionary, but i don't want to do it that way. I am using Spyder so I like to look at my tables in the Variable Explorer and I do not like printing them to the console. Additionally, I would like to modify some of the completed data frames and I need them to be their own thing for that.

Here is my code to make the dictionary (i did this because I wanted to look at all of the categories in each column with the frequency of those values):

import pandas as pd
     
mydict = {
    "dummy":[1, 1, 1], 
    "type":["new", "old", "new"],
    "location":["AB", "BC", "ON"]
} 

mydf = pd.DataFrame(mydict) 
colnames = mydf.columns.tolist()
     
mydict2 = {} 
for i in colnames:
    mydict2[i] = pd.DataFrame(mydf.groupby([i, 'dummy']).size()) 
     
print(mydict2)

mydf looks like this:

dummy type location
1 new AB
1 old BC
1 new ON

the output of print(mydict2) looks like this:

{'dummy':              0
dummy dummy   
1     1      3, 'type':             0
type dummy   
new  1      2
old  1      1, 'location':                 0
location dummy   
AB       1      1
BC       1      1
ON       1      1}

I want the final output to look like this:

Type:

Type Dummy
new 2
old 1

Location

Location Dummy
AB 1
BC 1
ON 1

I am basically just trying to generate a frequency table for each column in the original table, using a loop. Any help would be much appreciated!

1 Answers

i believe this yeilds the correct output :

type_count = mydf[["type", "dummy"]].groupby(by=['type'])['dummy'].sum().reset_index()
loca_count = mydf[["location", "dummy"]].groupby(by=['location'])['dummy'].sum().reset_index()

Edit : Dynamically, you could add all the dataframes to a loop like below : (assuming that you want to do it based on the dummy column)

df_list = []
for name in colnames:
    if name != "dummy":
        df_list.append(mydf[[name, "dummy"]].groupby(by=[name])['dummy'].sum().reset_index())
Related