首页 > 解决方案 > 如何在 Python 中基于其他列创建排名列

问题描述

我有一个如下所示的 python 数据框:

在此处输入图像描述

此数据帧已按“transaction_count”降序排序。我想在该数据框中创建另一个名为“rank”的列,其中包含 cust_ID 的出现次数。我的期望输出如下所示:

在此处输入图像描述

对于 cust_ID = 1234 且 transaction_count = 4,排名将为 1,对于下一次出现的 cust_ID = 1234,排名将为 2,依此类推。

我尝试了以下方法:

df['rank'] = df["cust_ID"].value_counts()
df.head(10)

但是排名列被创建为所有 NaN 值 在此处输入图像描述

任何有关如何解决此问题的建议将不胜感激!

标签: pythonpython-3.xpandas

解决方案


你可以做:

df['rank'] = df.groupby('cust_ID')['transaction_count'].rank(ascending=False)

输出:

    cust_ID     associate_ID    transaction_count   rank
0   1234           608          4                   1.0
1   1234           785          1                   2.0
2   4789           345          2                   1.0
3   3456           268          5                   1.0
4   3456           725          3                   2.0
5   3456           795          1                   3.0

请注意,这不仅给出了计数,还给出了基于transaction_count值的交易排名。


推荐阅读