Pandas 基于多栏的熊猫排名

Pandas 基于多栏的熊猫排名,pandas,ranking,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', 'N6543

我正在尝试根据几个列按升序排列数据。
请参见我正在处理的以下数据框:

{'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_日期按升序操作。

您可以使用秩方法获得排序的订单:

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也是一个系列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

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

谢谢你,Andy。此解决方案仅适用于相同的批次和操作。似乎按日期而不是在批次和操作范围内给出总体排名是行不通的。我很明显地改变了数据集以显示我是什么meaning@Felix还有一种排名分组方法。因此,您希望每个批次的排名按TXN_日期?每个批次和操作的排名按TXN_日期,因为同一批次可能处于不同的操作中。谢谢你,安迪。@Felix请看编辑。这对于一个拥有不同批次和操作的例子来说更有意义,但它应该是有效的。很好,安迪。非常感谢。