Vì bạn đã gắn thẻ câu hỏi này scipy
, bạn có thể sử dụng scipy.stats.rankdata
:
>>> rankdata[somelist]
array[[ 2., 3., 1., 4.]]
>>> len[somelist] - rankdata[somelist]
array[[ 2., 1., 3., 0.]]
>>> len[somelist] - rankdata[somelist] + 1
array[[ 3., 2., 4., 1.]]
Ưu điểm thực sự là bạn có thể chỉ định cách bạn muốn các trường hợp góc được đối xử:
>>> rankdata[[0,1,1,2]]
array[[ 1. , 2.5, 2.5, 4. ]]
>>> rankdata[[0,1,1,2], method='min']
array[[ 1, 2, 2, 4]]
>>> rankdata[[0,1,1,2], method='dense']
array[[ 1, 2, 2, 3]]
Câu hỏi Q2.4.3
Đưa ra một danh sách các điểm kiểm tra được đặt hàng, tạo ra một danh sách liên kết từng điểm với thứ hạng [bắt đầu với 1 cho điểm cao nhất]. Điểm bằng nhau nên có cùng thứ hạng. Ví dụ: danh sách đầu vào [87, 75, 75, 50, 32, 32]
sẽ tạo ra danh sách xếp hạng [1,2,2,4,5,5]
.
Giải pháp Q2.4.3
Tính toán xếp hạng dữ liệu số [1 đến n] dọc theo trục. Theo mặc định, các giá trị bằng nhau được gán một thứ hạng là trung bình của các cấp bậc của các giá trị đó. Chỉ mục để xếp hạng trực tiếp. Đối với chuỗi tham số này không được sử dụng và mặc định là 0.
Cách xếp hạng nhóm hồ sơ có cùng giá trị [nghĩa là mối quan hệ]:
Trung bình: Thứ hạng trung bình của nhóm
Min: Xếp hạng thấp nhất trong nhóm
Max: Xếp hạng cao nhất trong nhóm
Đầu tiên: xếp hạng được gán theo thứ tự chúng xuất hiện trong mảng
Dense: Giống như ‘Min, nhưng thứ hạng luôn tăng thêm 1 giữa các nhóm.
Đối với các đối tượng DataFrame, chỉ xếp hạng các cột số nếu được đặt thành true.
Na_option {‘Keep,’ Top, ‘Bottom,}, mặc định{‘keep’, ‘top’, ‘bottom’}, default ‘keep’Cách xếp hạng các giá trị NAN:
Giữ: Gán cấp bậc NAN cho các giá trị NAN
Top: Gán thứ hạng thấp nhất cho các giá trị NAN
Dưới cùng: Gán thứ hạng cao nhất cho các giá trị NAN
Liệu các yếu tố có nên được xếp theo thứ tự tăng dần hay không.
pctbool, mặc định saibool, default FalseCó hay không hiển thị bảng xếp hạng trả về ở dạng phần trăm.
ReturnSsame loại làm người gọiTrả về một loạt hoặc DataFrame với xếp hạng dữ liệu dưới dạng giá trị.
Ví dụ
>>> df = pd.DataFrame[data={'Animal': ['cat', 'penguin', 'dog', ... 'spider', 'snake'], ... 'Number_legs': [4, 2, 4, 8, np.nan]}] >>> df Animal Number_legs 0 cat 4.0 1 penguin 2.0 2 dog 4.0 3 spider 8.0 4 snake NaN
Các mối quan hệ được gán giá trị trung bình của các cấp bậc [theo mặc định] cho nhóm.
>>> s = pd.Series[range[5], index=list["abcde"]] >>> s["d"] = s["b"] >>> s.rank[] a 1.0 b 2.5 c 4.0 d 2.5 e 5.0 dtype: float64
Ví dụ sau đây cho thấy phương thức hoạt động như thế nào với các tham số trên:
Default_Rank: Đây là hành vi mặc định thu được mà không cần sử dụng bất kỳ tham số nào.
MAX_RANK: Cài đặt
method = 'max'
Các bản ghi có cùng giá trị được xếp hạng bằng thứ hạng cao nhất [ví dụ: Vì ‘Cat, và‘ Dog, cả hai đều ở vị trí thứ 2 và thứ 3, xếp hạng 3 được chỉ định.]NA_BOTTOM: Chọn
0, nếu có các bản ghi có giá trị NAN, chúng được đặt ở cuối bảng xếp hạng.>>> rankdata[[0,1,1,2]] array[[ 1. , 2.5, 2.5, 4. ]] >>> rankdata[[0,1,1,2], method='min'] array[[ 1, 2, 2, 4]] >>> rankdata[[0,1,1,2], method='dense'] array[[ 1, 2, 2, 3]]
PCT_RANK: Khi cài đặt
1, thứ hạng được thể hiện dưới dạng xếp hạng phần trăm.>>> rankdata[[0,1,1,2]] array[[ 1. , 2.5, 2.5, 4. ]] >>> rankdata[[0,1,1,2], method='min'] array[[ 1, 2, 2, 4]] >>> rankdata[[0,1,1,2], method='dense'] array[[ 1, 2, 2, 3]]
>>> df['default_rank'] = df['Number_legs'].rank[] >>> df['max_rank'] = df['Number_legs'].rank[method='max'] >>> df['NA_bottom'] = df['Number_legs'].rank[na_option='bottom'] >>> df['pct_rank'] = df['Number_legs'].rank[pct=True] >>> df Animal Number_legs default_rank max_rank NA_bottom pct_rank 0 cat 4.0 2.5 3.0 2.5 0.625 1 penguin 2.0 1.0 1.0 1.0 0.250 2 dog 4.0 2.5 3.0 2.5 0.625 3 spider 8.0 4.0 4.0 4.0 1.000 4 snake NaN NaN NaN 5.0 NaN