我是Python的新手,我有以下Pandas数据帧,其中一列表示股票名称,另一列表示股市回报,例如:
data = {'name': ["a","b","c","d","e","f","g","h"], 'value': [1,2,3,4,5,6,7,8]}
pd.DataFrame.from_dict(data)
我想做的是添加一列,如果股票名称的值属于整个样本中的第一个十分位数,那么它的值应该为1,否则为0。
我知道有函数qcut
,但我不知道如何正确使用它。我尝试了以下方法,但没有得到我想要的:
q = data.apply(lambda y: pd.qcut(y, 10,labels=False, duplicates="drop"), axis=0)
非常感谢。
您可以使用quantile
来计算您的十分位数:
df['≥90%'] = df['value'].ge(df['value'].quantile(0.9)).astype(int)
注意。如果您想要最低十分位数:df['value'].le(df['value'].quantile(0.1)).astype(int)
输出:
name value ≥90%
0 a 1 0
1 b 2 0
2 c 3 0
3 d 4 0
4 e 5 0
5 f 6 0
6 g 7 0
7 h 8 1