我试图在我的 dataframe 中对销售列进行十分位数,但也按年划分。所以每年应该有不同的十分位数。
df = ['年份','名称', '销售额']
我想我可以使用这个功能但想按年份分区
df['decile']=pd.qcut(df['sales'],10,labels=False)
我想我可以使用 groupby 但我无法弄清楚语法。
真的很感激任何帮助吗?
回答1
你可以试试:
df['decile'] = df.groupby('year')[['sales'']].apply(lambda g: pd.qcut(g.rank(method='first'), 10, labels=False)+1)
解释:
g.rank(method='first')
:如果有很多销售具有相同的values。我添加这个是因为在我的实验中,我遇到了很多情况,你有相同的 values。如果重复 values 的可能性很小,那么您可以用g
替换,这很好。10, labels=False)+1)
:如果要标记从 1 到 10,可以保留选项 +1。否则,它将标记从 0 到 9