我有一個包含所有數字的長行。資料都與一周相關聯,因此第 1 周有一個資料點,第 2 周有一個資料點,依此類推。我需要每 3 周取一次資料的平均值,跳過 2 周然后繼續取平均值。這是我的原始串列的一個簡短示例:
import pandas as pd
import numpy as np
data = {'Name': ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5',
'Week 6', 'Week 7', 'Week 8', 'Week 9', 'Week 10', 'Week 11', 'Week 12'],
'Value': [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,2]
}
df = pd.DataFrame(data)
avg_goodweeks = np.mean(np.concatenate((df.values[1:3], df.values[4:6], df.values[7:9],
df.values[10:12])))
avg_badweeks = np.mean(np.concatenate((df.values[3], df.values[6], df.values[9],
df.values[12])))
因此,理想情況下,此平均值是第 1、2、3、6、7、8、11、12 周的值,但我希望能夠設定 2 周的范圍或塊或類似的值為了通讀該行并在 2 周關閉模式中重復 3 周。我也會取所有跳過周的平均值,但我認為這將是相同的代碼。我意識到 .values[1:3] 不正確,這是我從 Excel 作業表硬編碼資料時的舊代碼。這段代碼的重點是從 excel 中洗掉硬編碼資料,將所有資料放在 python 上,并使用用戶定義的模式/范圍自動排序以獲取平均值,同時跳過其他資料。任何幫助或想法都會非常有用。
uj5u.com熱心網友回復:
IIUC,您可以在這里使用 iloc 并獲取 Value 列的平均值:
bad = df.iloc[3::3]['Value']
print(bad.mean())
1.6666666666666667
good = df.drop(bad.index)['Value']
print(good.mean())
1.4444444444444444
uj5u.com熱心網友回復:
avg_goodweeks = np.array([df.values[::3, 1],
df.values[1::3, 1]]).mean(axis=0)
avg_badweeks = df.values[2::3, 1].mean()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/389385.html
上一篇:字典詞條都一樣
