Pandas:过去 k 天的平均值

我想计算最近 k 次出现的 (FLIGHT_DURATION) 的滚动平均值。就 FLIGHT_DATE 给出的顺序而言,last 表示 last。


就像我在以下示例中所做的那样:


ARRIVAL_AIRPORT ARRIVAL_RUNWAY  DEPARTURE_AIRPORT DEPARTURE_RUNWAY


FLIGHT_DATE FLIGHT_DURATION FLIGHT_NUMBER

0   FRA YYY HAM XXX 2000-01-01  11  1

1   FRA YYY HAM XXX 2000-01-02  12  1

2   FRA YYY HAM XXX 2000-01-03  13  1

3   FRA YYY HAM XXX 2000-01-04  14  1

4   FRA YYY HAM XXX 2000-01-05  15  1

期望 k = 3:


解决方案:

ExampleA = ExampleA.groupby('FLIGHT_NUMBER').apply(lambda x: x.set_index('FLIGHT_DATE').resample('1D').first())


df1 = ExampleA.groupby(level=0)['FLIGHT_DURATION'].apply(lambda x: x.shift().rolling(min_periods=3,window=3).mean()).reset_index(name='Value_Average_Past_2_days')


pd.merge(ExampleA, df1, on=['FLIGHT_NUMBER', 'FLIGHT_DATE'], how='left')

输出:

FLIGHT_DATE ARRIVAL_AIRPORT ARRIVAL_RUNWAY  DEPARTURE_AIRPORT   

DEPARTURE_RUNWAY    FLIGHT_DURATION FLIGHT_NUMBER    

Value_Average_Past_3_days

0   2000-01-01  FRA YYY HAM XXX 11  1   NaN

1   2000-01-02  FRA YYY HAM XXX 12  1   NaN

2   2000-01-03  FRA YYY HAM XXX 13  1   NaN

3   2000-01-04  FRA YYY HAM XXX 14  1   12.0

4   2000-01-05  FRA YYY HAM XXX 15  1   13.0

如您所见,我添加了一个显示平均值的新列。至少需要3天。


问题:

现在我有一个更复杂的数据框:


FLIGHT_NUMBER FLIGHT_DATE DEPARTURE_AIRPORT ARRIVAL_AIRPORT 

DEPARTURE_RUNWAY ARRIVAL_RUNWAY FLIGHT_DURATION


 1 01.01.2000,HAM,FRA,XXX,YYY,11   -- NaN

 1 02.01.2000,HAM,FRA,XXX,YYY,12   -- NaN

 1 03.01.2000,HAM,FRA,XXX,YYY,13   -- NaN

 1 04.01.2000,HAM,FRA,XXX,ZZZ,101  -- NaN

 1 05.01.2000,HAM,FRA,XXX,YYY,14   -- 12

 1 06.01.2000,HAM,FRA,XXX,ZZZ,102  -- NaN


在值之前带有 - 的列是我期望的平均值。如您所见,这个例子有点复杂。仅对 FLIGHT_DATE 进行分组是不够的。必须有其他清晰可辨的列。ARRIVAL_RUNWAY、DEPARTURE_RUNWAY、DEPARTURE_AIRPORT 和 ARRIVAL_AIRPORT 现在也必须考虑正确计算(或者我错了?)


但这不起作用......我怎么能解决它?


婷婷同学_
浏览 232回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python