基于多列的 Pandas 排名

标签 pandas ranking

我正在尝试根据几列按升序对数据进行排名。
请参阅下面我正在处理的数据框:

{'FACILITY': ['AAA', 'AAA', 'AAA', 'AAA', 'AAA'],
 'IN_DATE':
 ['2015-08-30 05:49:05',
  '2015-08-30 05:49:05',
  '2015-08-30 05:49:05',
  '2015-08-30 05:49:05',
  '2015-09-02 20:56:59'],
 'LOT':
 ['N123456', 'N654321', 'N654321', 'N123456', 'N123456'],
 'OPERATION':
 ['100', '100', '100', '100', '100'],
 'TXN_DATE':
 ['2015-08-30 06:04:03',
  '2015-08-30 05:59:57',
  '2015-08-30 06:37:32',
  '2015-08-30 06:30:01',
  '2015-09-02 21:39:44']

我正在尝试根据批处理内的订单和基于 TXN_DATE 的升序操作创建新列“ORDER”。

最佳答案

您可以使用排名方法获得排序顺序:

In [11]: df
Out[11]:
  FACILITY              IN_DATE      LOT OPERATION             TXN_DATE
0      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:04:03
1      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 05:59:57
2      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:37:32
3      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:30:01
4      AAA  2015-09-02 20:56:59  N123456       100  2015-09-02 21:39:44

In [12]: df["TXN_DATE"].rank()
Out[12]:
0    2
1    1
2    4
3    3
4    5
Name: TXN_DATE, dtype: float64

作为专栏:

In [13]: df["ORDER"] = df["TXN_DATE"].rank()

In [14]: df
Out[14]:
  FACILITY              IN_DATE      LOT OPERATION             TXN_DATE  ORDER
0      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:04:03      2
1      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 05:59:57      1
2      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:37:32      4
3      AAA  2015-08-30 05:49:05  N123456       100  2015-08-30 06:30:01      3
4      AAA  2015-09-02 20:56:59  N123456       100  2015-09-02 21:39:44      5

Rank也是一种Series groupby方法:

In [15]: df.groupby(["LOT", "OPERATION"])["TXN_DATE"].rank()
Out[15]:
0    2
1    1
2    4
3    3
4    5
Name: (N123456, 100), dtype: float64

注意:在这个小示例中,名称来自唯一的组,通常没有名称。

关于基于多列的 Pandas 排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277836/

相关文章:

使用 R 中的两列对数据框进行排名

ruby - 如何使用 View 和创建日期以及点赞数对对象进行排名?

python-3.x - 按列位置分组的 Pandas 数据框

python - pandas .loc 返回空数据框

python - 获取 Pandas 交叉表中的每个元素

python - 为排名模型创建 Catboost 池时出错

algorithm - 帮助大型团体比赛的 Elo 系统细节

python - 向 pandas 数据框添加分组、聚合的 nunique 列

python - "Expanding"使用包含单元格的列表的 pandas 数据框

项目排名算法