2014-10-21 13 views
5

Tôi có khung dữ liệu với cột chứa Investment đại diện cho số tiền được đầu tư bởi một nhà giao dịch. Tôi muốn tạo 2 cột mới trong khung dữ liệu; một cho một thứ hạng decile và một thứ hạng khác xếp hạng dựa trên kích thước Investment. Tôi muốn 1 để đại diện cho các decile với các khoản đầu tư lớn nhất và 10 đại diện cho nhỏ nhất. Thật thú vị, tôi muốn 1 đại diện cho nhóm ngũ đầu tư lớn nhất và 5 đại diện cho nhóm nhỏ nhất.Cách tạo một cột Decile và Quintile để xếp hạng một biến khác dựa trên kích thước bằng Python, Pandas?

Tôi mới sử dụng Pandas, có cách nào để tôi có thể dễ dàng thực hiện việc này không? Cảm ơn!

Trả lời

8

Các chức năng bạn đang muốn tìm trong pandas.qcuthttp://pandas.pydata.org/pandas-docs/stable/generated/pandas.qcut.html

In [51]: import numpy as np 

In [52]: import pandas as pd 

In [53]: investment_df = pd.DataFrame(np.arange(10), columns=['investment']) 

In [54]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=False) 

In [55]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=False) 

In [56]: investment_df 
Out[56]: 
    investment decile quintile 
0   0  0   0 
1   1  1   0 
2   2  2   1 
3   3  3   1 
4   4  4   2 
5   5  5   2 
6   6  6   3 
7   7  7   3 
8   8  8   4 
9   9  9   4 

Đó là chuẩn dán nhãn percentile lớn nhất với số lượng nhỏ nhưng bạn có thể làm điều này bằng

In [60]: investment_df['quintile'] = pd.qcut(investment_df['investment'], 5, labels=np.arange(5, 0, -1)) 

In [61]: investment_df['decile'] = pd.qcut(investment_df['investment'], 10, labels=np.arange(10, 0, -1)) 

In [62]: investment_df 
Out[62]: 
    investment decile quintile 
0   0  10  5 
1   1  9  5 
2   2  8  4 
3   3  7  4 
4   4  6  3 
5   5  5  3 
6   6  4  2 
7   7  3  2 
8   8  2  1 
9   9  1  1 
+0

Cảm ơn @ Dan sau là những gì tôi đang tìm kiếm và nó hoạt động tốt! Tôi sẽ đọc thêm về công cụ qcut, nó rất tiện dụng! Cảm ơn một lần nữa :) – roland

Các vấn đề liên quan