我想计算最近 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 现在也必须考虑正确计算(或者我错了?)
但这不起作用......我怎么能解决它?
相关分类