![](/img/trans.png)
[英]Mean of last N rows of pandas dataframe if the previous rows meet a condition
[英]Mean of the previous n rows
我有以下數據框:
date = pd.date_range('2021-01-01', periods = 21, freq = '60S')
df = pd.DataFrame({ 'Date': date,
'Type':'DM','DM','DM','DS','DS','DS','DS','DM','DS','DS','DM','DM','DM','DM','DM','DM','DM','DS','DS','DS','DM'],
'Value': [105,130,104,205,206,208,222,160,105,130,104,205,206,208,222,160,158,176,120,200,75]})
所以我想獲得df['mean']
,但僅適用於 Type 為 'DS' 且平均值必須是df['Value]
的前 3 行,其中 Type 為 DM 的情況。 我應該得到這樣的東西
Output
Type Value mean
0 DM 105 NaN
1 DM 130 NaN
2 DM 104 NaN
3 DS 205 113
4 DS 206 113
5 DS 208 113
6 DS 222 113
7 DM 160 NaN
8 DS 105 131,33
9 DS 130 131,33
10 DM 104 NaN
11 DM 205 NaN
12 DM 206 NaN
13 DM 208 NaN
14 DM 222 NaN
15 DS 160 212
16 DM 158 NaN
17 DS 176 196
18 DS 120 196
19 DS 200 196
20 DM 75 NaN
我嘗試使用 grouby,但我設法僅獲得相等df['Type']
值的結果(如果該值為“DM”,則我獲得的平均值與之前的“DM”值相同)。
我試過的代碼: df['Avg_Back'] = ((df.groupby('Type')['Value'].rolling(window=4).mean().reset_index(level=0,drop=True))*4 - df['NOx'])/3
但是,我不知道如何使用它來計算不同類型值的平均值。
df["mean"] = df[df.Type == "DM"].rolling(3)["Value"].mean()
df["mean"] = df["mean"].ffill()
df.loc[df.Type == "DM", "mean"] = np.nan
print(df)
印刷:
Date Type Value mean
0 2021-01-01 00:00:00 DM 105 NaN
1 2021-01-01 00:01:00 DM 130 NaN
2 2021-01-01 00:02:00 DM 104 NaN
3 2021-01-01 00:03:00 DS 205 113.000000
4 2021-01-01 00:04:00 DS 206 113.000000
5 2021-01-01 00:05:00 DS 208 113.000000
6 2021-01-01 00:06:00 DS 222 113.000000
7 2021-01-01 00:07:00 DM 160 NaN
8 2021-01-01 00:08:00 DS 105 131.333333
9 2021-01-01 00:09:00 DS 130 131.333333
10 2021-01-01 00:10:00 DM 104 NaN
11 2021-01-01 00:11:00 DM 205 NaN
12 2021-01-01 00:12:00 DM 206 NaN
13 2021-01-01 00:13:00 DM 208 NaN
14 2021-01-01 00:14:00 DM 222 NaN
15 2021-01-01 00:15:00 DS 160 212.000000
16 2021-01-01 00:16:00 DM 158 NaN
17 2021-01-01 00:17:00 DS 176 196.000000
18 2021-01-01 00:18:00 DS 120 196.000000
19 2021-01-01 00:19:00 DS 200 196.000000
20 2021-01-01 00:20:00 DM 75 NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.