我想根据每个州的“ total_sales”是正数还是负数,以降序(最大到最小)对以下数据集进行排序。例如,对于AK,所有4个地区的总销售额均为正。因此,区域将按照降序从所有正区域的最大销售额开始排序,然后再降序移至负区域。对于NC,这将是相反的,因为NC的“ total_sales”净值为负。
此外,如果可能的话,为了表示表示“ total_sales”趋势的第一个区域/最大区域,我想创建一个列,该列表示与整体“每个州的total_sales趋势。
State Region Sales Total_sales
AK North 10 20
AK South 25 20
AK East -30 20
AK West 15 20
NC North 20 -35
NC South -50 -35
NC East -20 -35
NC West 15 -35
所需的输出
State Region Sales Total_sales Note
AK South 25 20
AK West 15 20
AK North 10 20
AK East -30 20 offset
NC South -50 -35
NC East -20 -35
NC North 20 -35 offset
NC West 15 -35
谢谢!您可以提供的任何帮助/指导都将不胜感激!
答案 0 :(得分:2)
首先,我们需要使用np.sign
创建排序键
df['sign']=np.sign(df.Total_sales)
df['sign']=df.sign*np.sign(df.Sales)
df['sign2']=df.Sales.abs()
df=df.sort_values(['State','sign','sign2'],ascending=[True,False,False])
然后我们获得偏移位置
df['SaleSign']=np.sign(df.Sales)
df['note']=df.groupby('State').SaleSign.diff().fillna(0).ne(0).map({True:'offset',False:''})
df
Out[427]:
State Region Sales Total_sales sign SaleSign note
1 AK South 25 20 1 1
3 AK West 15 20 1 1
0 AK North 10 20 1 1
2 AK East -30 20 -1 -1 offset
6 NC East -20 -35 1 -1
5 NC South -50 -35 1 -1
4 NC North 20 -35 -1 1 offset
7 NC West 15 -35 -1 1