簡體   English   中英

熊貓:滾動意味着僅使用基於另一列的最后更新

[英]Pandas: Rolling mean using only the last update based on another column

我想執行滾動平均值,而平均值不包括在另一列中找到的重復項。 讓我提供一個示例數據框:

Date            Warehose       Value
10-01-1998      London          10
13-01-1998      London          13
15-01-1998      New York        37
12-02-1998      London          21
20-02-1998      New York        39
21-02-1998      New York        17

在此示例中,假設我喜歡執行 30 天滾動Value ,但僅考慮倉庫位置的最后一次更新。 生成的數據框預計為:

 Date         Value     Rolling_Mean
02-01-1998      10           10
05-01-1998      13           13
15-01-1998      37           20
12-02-1998      21           29           
20-02-1998      39           30 
21-02-1998      17           19

我擁有的數據相對較大,因此盡可能高效。

這有點棘手。 由於rolling.apply僅適用於 Series 並且您需要“Warehose”和“Value”來執行計算,您需要使用函數(和“全局”變量,這不是超級干凈的 IMO)訪問完整的數據幀:

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
df2 = df.set_index('Date')

def agg(s):
    return (df2.loc[s.index]
               .drop_duplicates(subset='Warehose', keep='last')
               ['Value'].mean()
           )

df['Rolling_Mean'] = (df.sort_values(by='Date')
                        .rolling('30d', on='Date')
                        ['Value']
                        .apply(agg, raw=False)
                      )

輸出:

        Date  Warehose  Value  Rolling_Mean
0 1998-01-10    London     10          10.0
1 1998-01-13    London     13          13.0
2 1998-01-15  New York     37          25.0
3 1998-02-12    London     21          29.0
4 1998-02-20  New York     39          30.0
5 1998-02-21  New York     17          19.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM