python - Pandas 排名 vs 变换 ('rank' )

标签 python pandas

我不确定这是错误还是功能,但我真的很想了解它是如何工作的。

我有一个非常简单的数据集

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/

相关文章:

python-3.x -\将字段内带双引号的 CSV 复制到表中

python - 获取 django 对象的一对多设置属性的名称

python - Boto SES - send_raw_email() 给多个收件人

python - 如何从pandas中的csv文件中进行计数和百分比

python - Keras ANN 的 Pandas 数据框形状不正确

python - 如何根据单独列表中的索引值过滤数据框?

python - 在 Keras 中的 BERT 编码器之上堆叠 LSTM 层

python - 属性错误: Module "lightgbm" has no attribute "LGBMClassifier" and "Dataset"

python - 从列表创建实例名称 (Python)

python - ValueError : Shape of passed values is X, 索引暗示 Pandas 应用和转换中的 Y