Search code examples
pythonpandasdataframefor-loopf-string

For loop with f-string with pandas dataframe


I need to try create two loops (must be separate):

LOOP 1) for each fruit:

  1. keep rows if that fruit is True
  2. remove rows with duplicate dates (either row can be deleted)
  3. save the result of the above as a dataframe for each fruit

LOOP 2) for each dataframe created, graph date on fruit_score:

    concat   apple_score  banana_score       date        apple      banana  
1   apple     0.400         0.400        2010-02-12      True        False  
2   banana    0.530         0.300        2010-01-12      False       True   
3   kiwi      0.532          0.200       2010-03-03      False       False  
4   bana      0.634         0.100        2010-03-03      False       True   

I tried:

fruits = ['apple',  'banana',   'orange']
for fruit in fruits:
    selected_rows = df[df[ fruit ] == True ]
    df_f'{fruit}' = selected_rows.drop_duplicates(subset='date')

for fruit in fruits:
    df_f'{fruit}'.plot(x="date", y=(f'{fruit}_score'), kind="line")

Solution

  • You should do something along the lines suggested by @youyoun:

    dfs = {}
    fruits = ['apple',  'banana']
    for fruit in fruits:
        selected_rows = df[df[ fruit ] == True ].drop_duplicates(subset='date')
        dfs[f'df_{fruit}'] = selected_rows
    
    for a,v in dfs.items():
        print(a)
        print(v)
    

    Output:

    df_apple
      concat  apple_score  banana_score        date  apple  banana
    1  apple          0.4           0.4  2010-02-12   True   False
    df_banana
       concat  apple_score  banana_score        date  apple  banana
    2  banana        0.530           0.3  2010-01-12  False    True
    4    bana        0.634           0.1  2010-03-03  False    True