Pandas根据列表对列表进行排序,同时保留date_time顺序



我有两个看起来相似的数据帧。这是与第一个不同的头,而第二个在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)

最新更新