我有一个带数字列的数据框。对于每一列,我想计算分位数信息并将每一行分配给其中一个。我试图使用^{df.to_quintile(num of quantiles)
这样的方法。这就是我的想法,但我想知道是否有一种更简洁/熊猫的方式来做这件事。
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')
谢谢, 扎克cp
编辑:在看到DSMs应答后,可以编写更简单的函数(如下)。伙计,真是太好了。
def quantile(column, quantile=5):
q = qcut(column, quantile)
return len(q.levels)- q.labels
df.apply(quantile)
#or
df['A'].apply(quantile)
我认为使用存储在由
qcut
返回的Categorical
对象中的labels
可以使这个过程简单得多。例如:或匹配您的代码:
相关问题 更多 >
编程相关推荐