Tôi có một khung dữ liệu với các cột số. Đối với mỗi cột, tôi muốn tính toán thông tin định lượng và gán mỗi hàng cho một trong số chúng. Tôi đã cố gắng sử dụng qcut()
method để trả lại danh sách thùng nhưng thay vào đó sẽ tính riêng từng thùng. Những gì tôi nghĩ có thể tồn tại nhưng tôi không thể tìm thấy nó sẽ là một phương pháp như df.to_quintile(num of quantiles)
. Đây là những gì tôi đã đưa ra nhưng tôi tự hỏi nếu có một cách succint/gấu trúc hơn để làm điều này.Chuyển dữ liệu vào thùng định lượng
import pandas as pd
#create a dataframe
df = pd.DataFrame(randn(10, 4), columns=['A', 'B', 'C', 'D'])
def quintile(df, column):
"""
calculate quintiles and assign each sample/column to a quintile
"""
#calculate the quintiles using pandas .quantile() here
quintiles = [df[column].quantile(value) for value in [0.0,0.2,0.4,0.6,0.8]]
quintiles.reverse() #reversing makes the next loop simpler
#function to check membership in quintile to be used with pandas apply
def check_quintile(x, quintiles=quintiles):
for num,level in enumerate(quintiles):
#print number, level, level[1]
if x >= level:
print x, num
return num+1
df[column] = df[column].apply(check_quintile)
quintile(df,'A')
cảm ơn, zach cp
EDIT: Sau khi nhìn thấy DSMs trả lời các chức năng có thể được viết đơn giản hơn nhiều (dưới đây). Người đàn ông, đó là ngọt ngào.
def quantile(column, quantile=5):
q = qcut(column, quantile)
return len(q.levels)- q.labels
df.apply(quantile)
#or
df['A'].apply(quantile)
nhờ DSM. Tôi không nhận ra rằng đầu ra qcut() có nhãn. Đó là những gì tôi cần! – zach
Cảm ơn @ DSM, tôi không biết rằng qcut/cut có thuộc tính label (không hiển thị trong tự động hoàn thành IPython). Cho đến nay tôi nghĩ rằng tôi đã phải gọi 'nhãn = False' để gọi hàm để có được các nhãn là tốt. Nhưng nó đẹp hơn thế này. – tim