您可以通过
groupby与
rank方法一起使用两次来做到这一点:
In [11]: g = df.groupby('key1')使用min方法参数为共享相同RN的相同数据的值赋值:
In [12]: g['data1'].rank(method='min')Out[12]:0 11 22 23 14 4dtype: float64In [13]: df['RN'] = g['data1'].rank(method='min')
然后对这些结果进行分组,并添加关于data2的排名:
In [14]: g1 = df.groupby(['key1', 'RN'])In [15]: g1['data2'].rank(ascending=False) - 1Out[15]:0 01 02 13 04 0dtype: float64In [16]: df['RN'] += g1['data2'].rank(ascending=False) - 1In [17]: dfOut[17]: data1 data2 key1 RN0 1 1 a 11 2 10 a 22 2 2 a 33 3 3 b 14 3 30 a 4
感觉应该有一种本机的方法可以做到这一点(可能有!!)。



