pandas 如何对按用户分组的事务进行滚动计数

jvlzgdj9  于 2023-03-11  发布在  其他
关注(0)|答案(1)|浏览(172)

我有一个数据集,其中包含2022年11月1日到2022年12月31日之间的userId、datetime、transactionId、amount和merchantDescription列。
我需要在连续5天、10天和30天的时间段内计算用户事务,但我遇到了困难。
下面是我的流程:
1.按日期时间设置索引

df1 = df1.set_index('authorizationProcessedAt')

1.按userId计算滚动计数

transaction_counts = df1.groupby('userId')['transactionId'].rolling(5).count()

1.然后重命名并将两个 Dataframe 连接在一起

transaction_counts = pd.DataFrame(transaction_counts)
transaction_counts.rename(columns={'transactionId':'transaction_count'}, inplace=True)
df1 = pd.concat([df1, transaction_counts], axis=0)

生成的结果如下所示,但不是我需要的结果:
head of dataframe
有人能建议如何实现滚动计数的用户?

pkmbmrz7

pkmbmrz71#

试试这个

# Set the index to datetime
df1 = df1.set_index(pd.DatetimeIndex(df1['authorizationProcessedAt']))
# Group by userId and a rolling time window, and count the number of transactions
rolling_counts = df1.groupby('userId')['transactionId'].rolling('5D').count()
#rename & merge
rolling_counts = rolling_counts.rename('transaction_count').reset_index().drop('userId', axis=1)
df = pd.merge(df1, rolling_counts, left_index=True, right_on='authorizationProcessedAt')

您可以将“5D”替换为“10D”或“30D”,以分别获取10天或30天的滚动计数

相关问题