我想將不同日期的資料幀特定列的標準差和平均值放在新的資料幀中。我使用 for 回圈和追加,但它回傳最后一個,而不是全部。這是我的代碼:
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, reads individual Excel spreadsheet
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)
uj5u.com熱心網友回復:
我不確定,但我相信你應該將 分配final.append(...給一個變數:
final = final.append({'Month':j ,'Hour':j,'standard deviation':x,'average':y},ignore_index=True)
更新
如果您對時間效率感興趣,建議使用所需值的串列 ( {'Month':j ,'Hour':j,'standard deviation':x,'average':y}),并將此串列分配給資料框。據說它有更好的性能。(感謝@stefan_aus_hannover)
uj5u.com熱心網友回復:
這就是我在對 Amirhossein 的回答的評論中所指的內容:
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)
uj5u.com熱心網友回復:
從概念上講,您只是aggregate通過,hour使用兩個功能std; mean然后將其附加到您的結果資料框中。類似于以下內容;如果你給我們可重現的輸入資料,我會修改它。注意.agg/.aggregate()函式接受 dict of{'result_col': aggregating_function}并允許您傳遞多個聚合函式,并直接命名它們的結果列,因此無需宣告臨時變數。如果您只關心匯總第 4 列(“總負載(MWh)”),則無需閱讀第 0..3 列。
for hour in hh:
# Read in columns-of-interest from individual Excel sheet for this month and day...
data = get_data(1, hour)
data = pd.DataFrame(data,columns=['Flowday','Interval','Demand','Losses (MWh)','Total Load (MWh)'])
# Compute corresponding row of the aggregate...
dat_hh_aggregate = pd.DataFrame({['Month':whatever ,'Hour':hour]})
dat_hh_aggregate = dat_hh_aggregate.append(data.agg({'standard deviation':pd.Series.std, 'average':pd.Series.mean)})
final = final.append(dat_hh_aggregate, ignore_index=True)
筆記:
pd.read_excelusecols=['Flowday','Interval',...]允許您避免閱讀您最初不感興趣的列。您沒有為 提供可重現的代碼get_data(),但您應該對其進行引數化,以便您可以傳遞感興趣的列串列。但是您似乎只想匯總第 4 列(“總負載(MWh)”)。- 不需要存盤單獨的區域變數
s_td,meean直接使用.aggregate() - 沒有必要同時擁有
lister和final。只需有一個 results dataframefinal,并附加到它,忽略索引。(如果您對此有疑問,請在此處發布更新的代碼,確保它是可重現的)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443593.html
上一篇:資料庫內的多組計數
下一篇:從資料框中提取行
