나는 약간 긴 하나보다 대체 솔루션이있는 이전에 게시되었지만 날짜 열 변환 함수 내부에서 무슨 일이 벌어지고 있는지 쉽게 이해할 수 있다고 생각합니다.
import numpy as np
import pandas as pd
from datetime import date
# Build data
prd = [1, 2, 3, 4, 1, 2]
grp = ['A', 'A', 'A', 'A', 'B', 'B']
yr = [2010, 2010, 2010, 2010, 2000, 2000]
mth = [7, 7, 7, 7, 8, 8]
day = [1, 13, 13, 21, 20, 15]
dt = [date(y, m, d) for y, m, d in zip(yr, mth, day)]
# Create data frame
df = pd.DataFrame({'Period': prd, 'Group': grp, 'Dates': dt},
columns=['Period', 'Group', 'Dates'])
# Transformation function for the date column
def f(ser):
v = ser.values
# Get time difference in days
delta = [float((ii-v[0]).days) for ii in v]
# Get number of items to divide by
dv = np.arange(len(delta))+1
# Get cumulative average
cumavg = [nm/dm for nm, dm in zip(delta, dv)]
# Create output pandas Series object and return it
out = pd.Series(cumavg, index=ser.index)
return out
# Apply the transformation function to the Dates column
dfappend = pd.DataFrame({'Cum_Avg': df.groupby("Group").Dates.apply(f)})
# Delete the Dates column
del df['Dates']
# Merge to create the revised data frame
df = pd.merge(df, dfappend, left_index=True, right_index=True)
print(df)
출력은 :
Period Group Cum_Avg
0 1 A 0.0
1 2 A 6.0
2 3 A 4.0
3 4 A 5.0
4 1 B 0.0
5 2 B -2.5
는 2 B 값은 -5/2이어야한다 또한 상기 출력 포맷은 비트 청소기입니까? 당신은 궁극적으로 (플로트) 일 평균 차이를 찾고 있습니까? – Jeff