我不确定这是错误还是功能,但我真的很想了解它是如何工作的。
我有一个非常简单的数据集
In [0]: data
Out[0]:
group value data
0 A 1 1
1 A 2 1
2 B 3 1
3 B 4 1
然后我有一些转变:
In [1]: data.groupby('group').transform('rank')
Out[1]:
value data
0 1.0 1.5
1 2.0 1.5
2 1.0 1.5
3 2.0 1.5
In [2]: data.groupby('group').value.transform('rank')
Out[2]:
0 1
1 1
2 2
3 2
In [3]: data.groupby('group').data.transform('rank')
Out[3]:
0 1.5
1 1.5
2 1.5
3 1.5
In [4]: data.groupby('group').transform('rank').value
Out[4]:
0 1.0
1 2.0
2 1.0
3 2.0
In [5]: data.groupby('group').value.rank()
Out[5]:
0 1.0
1 2.0
2 1.0
3 2.0
In [6]: data.groupby('group').cumcount()
Out[6]:
0 0
1 1
2 0
3 1
我觉得奇怪的事情:
- 第一个。虽然我似乎明白
value
列发生了什么(类似于第 5 和第 6 列),但我无法理解data
列发生了什么。1.5
的值从何而来? - 第二个。它不是只选择指定的列并应用类似于第一个的逻辑,而是完全改变了输出。我可以假设现在枚举组而不是组内的行,但我仍然不明白为什么要以这种奇怪的方式完成?
- 第三个。它的行为完全符合预期,它只是选择了指定的列并应用了与第一个列相同的逻辑(与前一个相比)。但我仍然想念这个值的来源;
- 第四个。这个不应该和第二个一样吗?
- 第5个和第6个看起来一模一样,但是后一个是从0开始的,对吗?
如果有人能向我解释一下,我将不胜感激。
谢谢。
最佳答案
让我添加更多的困惑 - rank()方法有一个方法
参数...
默认值:method='average'
In [70]: data.groupby('group').transform('rank')
Out[70]:
value data
0 1.0 1.5
1 2.0 1.5
2 1.0 1.5
3 2.0 1.5
In [71]: data.groupby('group').transform('rank', method='average')
Out[71]:
value data
0 1.0 1.5
1 2.0 1.5
2 1.0 1.5
3 2.0 1.5
方法:min
In [72]: data.groupby('group').transform('rank', method='min')
Out[72]:
value data
0 1.0 1.0
1 2.0 1.0
2 1.0 1.0
3 2.0 1.0
方法:max
In [73]: data.groupby('group').transform('rank', method='max')
Out[73]:
value data
0 1.0 2.0
1 2.0 2.0
2 1.0 2.0
3 2.0 2.0
方法:先
In [74]: data.groupby('group').transform('rank', method='first')
Out[74]:
value data
0 1.0 1.0
1 2.0 2.0
2 1.0 1.0
3 2.0 2.0
方法:密集
In [75]: data.groupby('group').transform('rank', method='dense')
Out[75]:
value data
0 1.0 1.0
1 2.0 1.0
2 1.0 1.0
3 2.0 1.0
来自 docs :
method : {
average
,min
,max
,first
,dense
}average: average rank of group
min: lowest rank in group
max: highest rank in group
first: ranks assigned in order they appear in the array
dense: like ‘min’, but rank always increases by 1 between groups
还有一个参数:
pct : boolean, default False
Computes percentage rank of data
关于python - Pandas 排名 vs 变换 ('rank' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421875/