[英]Creating new column in DataFrame with conditional rolling().mean()
我正在處理相當大的 DataFrame 並想加快速度。 我的數據采用以下格式:
姓名 | 數字 |
---|---|
條件一 | 1個 |
條件一 | 2個 |
條件一 | 2.2 |
條件一 | 2個 |
條件二 | 1個 |
條件二 | 1.1 |
條件二 | 1.2 |
條件二 | 1.3 |
現在我想對數字應用滾動平均值,但不混合不同的條件。 我的預期結果是:
姓名 | 數字 | 意思 |
---|---|---|
條件一 | 1個 | 楠 |
條件一 | 2個 | 1.5 |
條件一 | 2.2 | 2.1 |
條件一 | 2個 | 2.1 |
條件二 | 1個 | 楠 |
條件二 | 1.1 | 1.05 |
條件二 | 1.2 | 1.15 |
條件二 | 1.3 | 1.25 |
我現在正在做的是迭代所有條件並將計算出的平均值保存在不同的 Dataframe 中,例如:
mean = {}
for con in data["Name"].drop_duplicates():
mean[con] = data[data["Name" == con]].rolling(window=2).mean()
但這總是需要幾分鍾,這就是為什么我正在尋找直接創建列的替代方法。 我用 .apply 試過了,但那不起作用。 至少我到目前為止沒有嘗試過。
非常感謝你!
按名稱分組,然后使用滾動平均值轉換數字:
df['Mean'] = df.groupby('Name')['Number'].transform(lambda x: x.rolling(window=2).mean())
print(df)
Output
Name Number Mean
0 Condition 1 1.0 NaN
1 Condition 1 2.0 1.50
2 Condition 1 2.2 2.10
3 Condition 1 2.0 2.10
4 Condition 2 1.0 NaN
5 Condition 2 1.1 1.05
6 Condition 2 1.2 1.15
7 Condition 2 1.3 1.25
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.