2016-11-04 74 views
1

我不確定這是一個錯誤還是一個功能,但我真的想了解它是如何工作的。熊貓排名與變換('排名')

我有一個非常簡單的數據集

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的值從哪裏來的?
  • 第二個。不是隻選擇指定的列並應用與第1列類似的邏輯,它完全改變了輸出。我可以推測現在枚舉組而不是組內的行,但我仍然不明白爲什麼它以這樣一種奇怪的方式完成?
  • 第三個。它的行爲與預期完全一致,因爲它只是選擇了指定的列並應用了第一個邏輯(與之前的邏輯相反)。但是我仍然錯過了這個價值的來源;
  • 第四個。這不應該和第二個一樣嗎?
  • 第5個和第6個看起來完全一樣,但後一個從0開始。它是正確的嗎?

如果有人能向我解釋,我將非常感激。

謝謝。

回答

0

讓我再添加一點混淆 - rank()方法有一個method參數...

默認: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 

方法:first

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 

方法:dense

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

方法:{averageminmaxfirstdense}

平均:組

的平均等級

分鐘:在組最低秩

最大:在組最高秩

第一:如「分鐘」,但秩總是通過增加:分配,以便它們出現在陣列中

緻密行列組

之間1

和有另一個參數:

PCT:布爾型,默認爲false

計算數據

+0

的百分比排位那絕對會讓事情變得更加混亂給我。但是我仍然不明白兩件事:1)'data'列的計算是如何計算的? 1和1的平均值如何爲1.5? 2)爲什麼它看起來像應用於'value'和'data'列的邏輯不同? –