使用 pandas 计算过去一周按组的观察次数
Count number of observations by group in past week using pandas
我有一个不平衡的面板,其中以不规则的间隔反复观察一个人。我想使用 pandas.
计算过去一周观察小组中每个人的次数
Id Date
a 2000-01-01
a 2000-01-02
a 2000-01-05
b 2000-01-01
b 2000-02-01
变成
Id Date Count
a 2000-01-01 0
a 2000-01-02 1
a 2000-01-05 2
b 2000-01-01 0
b 2000-02-01 0
重采样方法似乎不起作用,因为当按 Id 和日期索引时我无法重采样...
出于某种原因,当我尝试 pd.rolling_count
时它不起作用,所以我将其放在一起。不确定它是否最有效,但它确实有效。
def count_obs(df, interval=7):
idx = df['Date']
df['temp'] = 1
by_day = df.set_index('Date').resample('D').fillna(0)
csum = by_day['temp'].cumsum()
by_day['Count'] = csum - csum.shift(interval).fillna(0)
return by_day.ix[by_day.index.isin(idx), 'Count']
df.groupby('Id').apply(count_obs)
我有一个不平衡的面板,其中以不规则的间隔反复观察一个人。我想使用 pandas.
计算过去一周观察小组中每个人的次数Id Date
a 2000-01-01
a 2000-01-02
a 2000-01-05
b 2000-01-01
b 2000-02-01
变成
Id Date Count
a 2000-01-01 0
a 2000-01-02 1
a 2000-01-05 2
b 2000-01-01 0
b 2000-02-01 0
重采样方法似乎不起作用,因为当按 Id 和日期索引时我无法重采样...
出于某种原因,当我尝试 pd.rolling_count
时它不起作用,所以我将其放在一起。不确定它是否最有效,但它确实有效。
def count_obs(df, interval=7):
idx = df['Date']
df['temp'] = 1
by_day = df.set_index('Date').resample('D').fillna(0)
csum = by_day['temp'].cumsum()
by_day['Count'] = csum - csum.shift(interval).fillna(0)
return by_day.ix[by_day.index.isin(idx), 'Count']
df.groupby('Id').apply(count_obs)