我有两个看起来相似的数据帧。这是与第一个不同的头,而第二个在spen_exc spen_pub nr_sessions比率方面不同。两者的用户数量相同,为10个用户。
date_time user spend_exc spend_pub nr_sessions ratio
48 2022-08-03 user1 623.3415 0.0 987 6.315517
50 2022-08-03 user2 2304.3439 0.0 2988 7.711994
51 2022-08-03 user3 5380.3535 0.0 7954 6.764337
58 2022-08-03 user4 28730.2600 0.0 44993 6.385496
64 2022-08-03 user5 46366.1278 0.0 94856 4.888054
我有8月3日至8月12日的数据。
我想对数据帧进行排序,以便每个new_date时间都从整个数据集中支出最高的用户开始,按降序排列,例如user5、user4等。我想按升序保留date_time列。
我的计划是将它们分组并保存在列表中
ordered_by_spend = filtered_p1.groupby(['user']).sum().sort_values(by='spend_exc', ascending=False).index.tolist()
然而,我不太清楚如何基于这个列表来创建两个数据帧,以便date_time保持升序。我尝试在.sort_values(by=)
中传递列表,但出现了错误。我不太清楚如何应用这个列表。
编辑:
您可以尝试以下操作吗:
date_time_ordered_by_spend = filtered_p1.groupby(['date_time', 'user'])
.sum()
.reset_index()
.sort_values(by=['date_time','spend_exc'],
ascending=[True, False])['date_time']
.unique()
.tolist()
df2['date_time'] = pd.Categorical(
df2['date_time'], categories=date_time_ordered_by_spend, ordered=True)
df2.sort_values('date_time', inplace=True)