我有一个结构如下的熊猫数据框:
data = DataFrame({'Cat1':['A', 'B', 'B', 'C'], 'Cat2': ['X', 'Y', 'Z', 'X'], 'Counter': [0, 4, 1, 5]})
现在我想添加一个单独的列,按 Cat1 排名(所以在这种情况下:1、3、2、4 作为新列)。我的第一次尝试是:
data['ranking'] = data['ranking'] + data[data['Cat1'] == 'A']['Counter'].rank(ascending=0).fillna(0)
但是,当我添加第二个类别(data['Cat1']=='B' 作为条件)时,它会覆盖现有值。这是我所期望的,因为据我所知,我必须使用 .add() 。但是,以下脚本也会发生同样的情况:
data['ranking'].add(data[data['Cat1']=='A']['Counter'].rank(ascending=0))
还使用 NA 覆盖 Cat1==B 的所有值。我怎样才能避免这种情况?
提前致谢!
-----------------------编辑!!------------------
假设这是我的桌子:
普通排名会给我从 1 到 12 的所有数字的排名。现在我需要的是基于类别的排名,并作为原始 python DataFrame 中的附加列。
因此,最后一列应该是:2(a 的第二个值)3(a 的第三个值)1(a 的第一个值)1(b 的第一个值)1(第一个c) 的值 5 2 ...