Python Forum

Full Version: Loop different actions for an array
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello all,

I am making a program that needs to calculate the downtime of different modules of a tool.
I have already made a part of the program where it sorts one dataframe from an array with different data frames.
The problem is that I don't know how to make a loop so it processes all the dataframes in the array automatically.

Note that I used the second value of the array (DNS_8) as I was trying to make this work for only one value.

print(df['ent_name'].unique())

#making new dataframes
df_array = []
for name in df['ent_name'].unique() :
    df_array.append(df[df.ent_name == name])
    
['DNS_8-WM2' 'DNS_8' 'DNS_8-WM1' 'DNS_8-WM5' 'DNS_8-LP1' 'DNS_8-LP2'
 'DNS_8-LP5' 'DNS_8-LP6' 'DNS_8-ATM1']

df_array[1] = df_array[1].reset_index(drop=True)
DNS_8_Sorted = df_array[1][df_array[1]['state'].isin(['IDLE_ERROR', 'PARTLY_UP', 'UP'])]
# zoek enkel naar 'IDLE_ERROR' en 'PARTLY_UP' in de kolom 'state'

DNS_8_Sorted = DNS_8_Sorted[DNS_8_Sorted['state'].ne(DNS_8_Sorted['state'].shift())]
# na een IDLE_ERROR wordt altijd een PARTLY_UP gezocht en andersom ook

m1 = DNS_8_Sorted['state'].eq('IDLE_ERROR') & DNS_8_Sorted['state'].shift(-1).eq('PARTLY_UP' or 'UP')
m2 = DNS_8_Sorted['state'].eq('PARTLY_UP' or 'UP') & DNS_8_Sorted['state'].shift().eq('IDLE_ERROR')

DNS_8_Done = DNS_8_Sorted[m1 | m2]

IDLE_ERROR = DNS_8_Done.iloc[::2]
PARTLY_UP_OR_UP = DNS_8_Done.iloc[1::2]

DNS_8_Sorted['Time_difference'] = PARTLY_UP_OR_UP['date_time_stamp'] - IDLE_ERROR['date_time_stamp'].to_numpy()
DNS_8_Sorted['Time_difference'] = DNS_8_Sorted['Time_difference'].fillna(pd.Timedelta(0))
I hope you understand my problem as my english is not so great.

Best regards,

Tibo
You aren't taking advantage of the list of dataframes structure.

To reset the indices:
for my_df in df_array :
    my_df = my_df.reset_index(drop=True)
Not sure what you are wanting to do with the "sorted" as it does not appear to sort, rather filters. Is that what you want?
Hello Jef,

My endgoal is to make a piechart for every module of my tool.
this piechart needs to contain all the times the module went down.
However I am not sure that what I made so far is efficiƫnt coded.
The program should also be compatible with other tools that have different modules.

Kind regards

Tibo
how to plot histogram in pure python?
You may need to import matplotlib,
then
for my_df in df_array :
    my_df = my_df.reset_index(drop=True)
    my_df = my_df[my_df['state'].isin(['IDLE_ERROR', 'PARTLY_UP', 'UP'])]
    my_df.plot.pie(y = 'state', figsize = (6,6))