我有 4 個資料框(熊貓),它們的結構與這個相似:
index day1 day2 day3 day4 day5 ....
0 1.23 5.41 0 0 2.31
1 2.31 7.15 0 0 1.32
...
我想為每一行計算平均值、標準差、峰度和偏度,并將其作為新列添加到另一個現有資料框中。現在我使用 for 回圈來執行此操作,通過 for 回圈的計數更改列的名稱并將數字作為字串添加到列名稱中,因此我不會遍歷前一個 for 回圈的結果。這看起來像這樣:
phen_1=rain_calc.iloc[:,:20]
phen_2=rain_calc.iloc[:,20:55]
phen_3=rain_calc.iloc[:,55:70]
phen_4=rain_calc.iloc[:,70:80]
phen_5=rain_calc.iloc[:,70:110]
dfs_phens=[phen_1,phen_2,phen_3,phen_4,phen_5]
phen=1
for df in dfs_phens:
mean_col='mean_' str(phen)
std_col='std_' str(phen)
skew_col='skew_' str(phen)
kurt_col='mean_' str(phen)
total_col='total_' str(phen)
original_df[mean_col] =df.mean(axis=1)
original_df[std_col] =df.std(axis=1)
original_df[skew_col] =df.skew(axis=1)
original_df[kurt_col]=df.kurt(axis=1)
original_df[total_col]=df.sum(axis=1)
phen=phen 1
這有效并為我提供了我想要的輸出 - 帶有計算統計資訊的新列。但是,我想知道是否有更聰明、更美觀的代碼方式來做到這一點:)
所以我的目標是改進我的腳本——在 for 回圈中提供新的列名稱,而不是每次都創建字串,就像我現在所做的那樣。
uj5u.com熱心網友回復:
您可以嘗試使用pandas.DataFrame.aggregate.
dfs = []
for i, df in enumerate(dfs_phens):
df_ = (df.agg(['mean', 'std', 'skew', 'kurt', 'sum'], axis='columns')
.rename(columns=lambda col: f'{col}_{i 1}'))
dfs.append(df_)
original_df = pd.concat(dfs, axis=1)
uj5u.com熱心網友回復:
您是否考慮過使用字典?
my_dict = {
"mean" : df.mean(axis=1),
"std" : df.std(axis=1),
}
for colname, data in my_dict.items():
original_df[colname "_" str(phen)] = data
phen=phen 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/461276.html
