Home > Back-end >  Append std,mean columns to a DataFrame with a for-loop
Append std,mean columns to a DataFrame with a for-loop

Time:03-15

I want to put the std and mean of a specific column of a dataframe for different days in a new dataframe. I use a for loop and append, but it returns the last ones, not the whole. here is my code:

hh = ['01:00','02:00','03:00','04:00','05:00']
for j in hh:
    month = 1
    hour = j
    data = get_data(month, hour) ## it works correctly 
    data = pd.DataFrame(data,columns=['Flowday','Interval','Demand','Losses (MWh)','Total Load (MWh)'])
    s_td = data.iloc[:,4].std()
    meean = data.iloc[:,4].mean()
    final = pd.DataFrame(columns=['Month','Hour','standard deviation','average'])
    final.append({'Month':j ,'Hour':j,'standard deviation':s_td,'average':meean},ignore_index=True)

CodePudding user response:

I am not sure, but I believe you should assign the final.append(... to a variable:

final = final.append({'Month':j ,'Hour':j,'standard deviation':x,'average':y},ignore_index=True)

Update

If time efficiency is of interest to you, it is suggested to use a list of your desired values ({'Month':j ,'Hour':j,'standard deviation':x,'average':y}), and assign this list to the dataframe. It is said it has better performance.(Thanks to @stefan_aus_hannover)

CodePudding user response:

This is what I am referring to in the comments on Amirhossein's answer:

hh=['01:00','02:00','03:00','04:00','05:00']
lister = []
final = pd.DataFrame(columns=['Month','Hour','standard deviation','average'])
for j in hh:``
    month=1
    hour = j
    data = get_data(month, hour) ## it works correctly 
    data=pd.DataFrame(data,columns=['Flowday','Interval','Demand','Losses (MWh)','Total Load (MWh)'])
    s_td=data.iloc[:,4].std()
    meean=data.iloc[:,4].mean()
    lister.append({'Month':j ,'Hour':j,'standard deviation':s_td,'average':meean})
final = final.append(pd.DataFrame(lister),ignore_index=True)
  • Related