测试数据
df = pd.DataFrame(
{
'date': [1, 2, 3, 1, 2, 3],
'user': ['a', 'a', 'a', 'b', 'b', 'b'],
'value': [1, 2, 3, 2, 4, 6]
}
得到结果:
df.apply(lambda x: np.sum([df[(df.user == x.user) & (df.date == each)].iloc[0].value for each in range(1, x.date + 1)]) / x.date
, axis=1)
如果您缺少数据(有一周的数据但没有前一周的数据):
df.apply(
lambda x: np.sum(
[df[(df.user == x.user) & (df.date == each)].iloc[0].value
if df[(df.user == x.user) & (df.date == each)].shape[0] is not 0 else 0
for each in range(1, x.date + 1)]) / x.date, axis=1)
你可能想把它重写为函数,这段代码的可读性很差。