pandas 计算特定用户自上次事件以来的天数

brgchamk  于 2022-12-09  发布在  其他
关注(0)|答案(1)|浏览(120)

我有一个这样的数据集。
1.我想根据用户以前的事件计算每个用户的平均值。
1.计算每个用户的累积事件数
1.计算特定用户自上次事件以来的天数。

from datetime import date
import pandas as pd

Sales = [1000, 1450, 1390, 1778, 1966, 1100, 700, 900]
User_ID = [50, 52, 50, 53,53, 52, 52, 52]
begin_date = '2022-10-16 10:12:00'

# initialize data of lists.
data = {'date':pd.date_range(begin_date, periods=len(Sales)),
        'User_ID': User_ID,
       'Sales' : Sales}
  
# Create DataFrame
df = pd.DataFrame(data)
  
# Print the output.
df

输入

输出量

qvtsj1bj

qvtsj1bj1#

您可以通过展开

g = df.groupby('User_ID')
g['Sales'].transform(lambda x: x.expanding().mean())

你可以用下面的代码得到时间间隔:

s = g['date'].transform(lambda x: x.sub(x.shift(1)))

s

0      NaT
1      NaT
2   2 days
3      NaT
4   1 days
5   4 days
6   1 days
7   1 days
Name: date, dtype: timedelta64[ns]

你可以得到金钱

g.cumcount() + 1

产生所需输出

df.assign(mean= g['Sales'].transform(lambda x: x.expanding().mean()), 
          Time_Elapsed=s.div(pd.Timedelta('1day')).fillna(0).astype('int'), 
          No_of_event=g.cumcount() + 1)

实验结果:

date            User_ID Sales   mean    Time_Elapsed    No_of_event
0   2022-10-16 10:12:00 50  1000    1000.0  0               1
1   2022-10-17 10:12:00 52  1450    1450.0  0               1
2   2022-10-18 10:12:00 50  1390    1195.0  2               2
3   2022-10-19 10:12:00 53  1778    1778.0  0               1
4   2022-10-20 10:12:00 53  1966    1872.0  1               2
5   2022-10-21 10:12:00 52  1100    1275.0  4               2
6   2022-10-22 10:12:00 52  700     1083.3  1               3
7   2022-10-23 10:12:00 52  900     1037.5  1               4

相关问题