您可以在现有列上使用DataFrame.quantile和 q=[0.25, 0.5, 0.75] 来生成四分位数列。
然后,您可以在该四分位列上使用DataFrame.rank 。
有关添加四分位数列的示例,请参见下文:
import pandas as pd
d = {'one' : pd.Series([40., 45., 50., 55, 60, 65], index=['val1', 'val2', 'val3', 'val4', 'val5', 'val6'])}
df = pd.DataFrame(d)
quantile_frame = df.quantile(q=[0.25, 0.5, 0.75])
quantile_ranks = []
for index, row in df.iterrows():
if (row['one'] <= quantile_frame.ix[0.25]['one']):
quantile_ranks.append(1)
elif (row['one'] > quantile_frame.ix[0.25]['one'] and row['one'] <= quantile_frame.ix[0.5]['one']):
quantile_ranks.append(2)
elif (row['one'] > quantile_frame.ix[0.5]['one'] and row['one'] <= quantile_frame.ix[0.75]['one']):
quantile_ranks.append(3)
else:
quantile_ranks.append(4)
df['quartile'] = quantile_ranks
注意:使用 Pandas 可能有一种更惯用的方法来实现这一点......但这超出了我的范围