我有一个pandas DataFrame,其结构如下:
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)
但是,当我添加第二个类别(数据['Cat1'] =='B'作为条件)时,它会覆盖现有值。这是我的预期,因为据我所知,我必须使用.add()。但是,使用以下脚本也是如此:
data['ranking'].add(data[data['Cat1']=='A']['Counter'].rank(ascending=0))
同样覆盖Cat1 == B with NA的所有值。我怎么能避免这个?
提前致谢!
----------------------- 修改!! -------------- ----
让我们说这是我的表:
普通排名会给我一个所有数字1到12的排名。现在我需要的是基于类别的排名和原始python DataFrame中的附加列。
因此,最后一栏应该看起来如下: 2(排名第二的a) 3(排名第三的a) 1(排名第一的a) 1(排名第一的b) 1(排名第一的c) 五 2 ...
答案 0 :(得分:2)
我不确定我是否理解你的问题;也许下面这个有效吗?
data['Cat1'][data['Counter'].rank(ascending=0) - 1]
- 的修改 -
在评论中,我的解决方案是
data['ranking'] = data.groupby('Cat1')['Counter'].rank(ascending=0)
我想不出别的,对不起。也许其他人会有不同的观点..