我需要找到一些資料的月氣候學,這些資料在幾年內具有每日值。下面的代碼充分總結了我正在嘗試做的事情。monthly_mean保持特定月份的所有年份的平均值。然后,我需要在所有年份的特定月份中的每一天在新列中分配該平均值。無論出于何種原因,我的任務df['A Climatology'] = group['A Climatology']僅為 12 月份賦值。我怎樣才能讓任務在所有月份都發生?
data = np.random.randint(5,30,size=(365*3,3))
df = pd.DataFrame(data, columns=['A', 'B', 'C'], index=pd.date_range('2021-01-01', periods=365*3))
df['A Climatology'] = np.nan
monthly_mean = df['A'].groupby(df.index.month).mean()
for month, group in df.groupby(df.index.month):
group['A Climatology'] = monthly_mean.loc[month]
df['A Climatology'] = group['A Climatology']
df
uj5u.com熱心網友回復:
您的代碼將列 == 設定為組,因此您回圈的每次迭代都只為該組設定 df 的值——這就是為什么您的 df 在 12 月結束,也就是串列中的最后一個月。
monthly_mean = df['A'].groupby(df.index.month).mean()
for month, group in df.groupby(df.index.month):
df.loc[lambda df: df.index.month == month, 'A Climatology'] = monthly_mean.loc[month]
相反,您可以直接設定 df 的值,其中月份 == 可迭代月份。
uj5u.com熱心網友回復:
merged_df = pd.merge(df,
monthly_mean,
how='left',
left_on=df.index.month,
right_on=monthly_mean.index).drop('key_0', axis=1).set_index(df.index)
A_x B C A Climatology A_y
2021-01-01 12 20 18 NaN 16.752688
2021-01-02 24 26 11 NaN 16.752688
2021-01-03 18 27 15 NaN 16.752688
2021-01-04 18 5 22 NaN 16.752688
2021-01-05 10 15 25 NaN 16.752688
... ... ... ... ... ...
2023-12-27 19 15 11 16.11828 16.118280
2023-12-28 16 23 25 16.11828 16.118280
2023-12-29 6 13 16 16.11828 16.118280
2023-12-30 10 9 14 16.11828 16.118280
2023-12-31 15 22 17 16.11828 16.118280
或者在不創建新資料框的情況下執行此操作:
df = df.reset_index().merge(monthly_mean, how='left', left_on=df.index.month, right_on=monthly_mean.index).set_index('index')
monthly_means:
1 16.752688
2 16.476190
3 16.795699
4 17.111111
5 17.795699
6 18.111111
7 16.806452
8 15.236559
9 15.600000
10 18.279570
11 16.555556
12 16.118280
Name: A, dtype: float64
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/376787.html
