Python 按特定的用户定义顺序对pivot数据帧的索引进行排序

Python 按特定的用户定义顺序对pivot数据帧的索引进行排序,python,pandas,dataframe,pivot-table,Python,Pandas,Dataframe,Pivot Table,这是我的dfe:- ID CATEG LEVEL COLS VALUE COMMENTS 1 A PG Apple 428 comment1 1 A CD Apple 175 comment1 1 C PG Apple 226 comment1 1 C

这是我的
dfe
:-

ID        CATEG  LEVEL  COLS           VALUE   COMMENTS 
1         A      PG    Apple           428    comment1 
1         A      CD    Apple           175    comment1 
1         C      PG    Apple           226    comment1 
1         C      AB    Apple           884    comment1 
1         C      CD    Apple           288    comment1 
1         B      PG    Apple           712    comment1 
1         B      AB    Apple           849    comment1 
2         B      CD    Apple           376    comment1 
2         C      None  Orange          591    comment1 
2         B      CD    Orange          135    comment1 
2         D      None  Orange          423    comment1 
2         A      AB    Orange          1e13   comment1 
2         D      PG    Orange          1e15   comment2 
sl set
1   C
2   B
3   A
4   D
我正在创建一个
pivot
,如下所示:

df=pd.pivot_table(dfe,index=['ID','CATEG','LEVEL'],columns='COLS',values=['VALUE'])
我希望df按照索引
CATEG
LEVEL
我想根据另一个df
订单来订购df的
CATEG
:-

ID        CATEG  LEVEL  COLS           VALUE   COMMENTS 
1         A      PG    Apple           428    comment1 
1         A      CD    Apple           175    comment1 
1         C      PG    Apple           226    comment1 
1         C      AB    Apple           884    comment1 
1         C      CD    Apple           288    comment1 
1         B      PG    Apple           712    comment1 
1         B      AB    Apple           849    comment1 
2         B      CD    Apple           376    comment1 
2         C      None  Orange          591    comment1 
2         B      CD    Orange          135    comment1 
2         D      None  Orange          423    comment1 
2         A      AB    Orange          1e13   comment1 
2         D      PG    Orange          1e15   comment2 
sl set
1   C
2   B
3   A
4   D
LEVEL
的顺序为:-
PG AB CD
。对于所有
dfe
df,该顺序不会改变并保持不变,但
CATEG
会改变,只需根据
顺序设置

          Apple     Orange      
CATEG   PG  AB  CD  PG  AB  CD
C                       
B                       
A                       
D   
我尝试了很多东西,但遗漏了一些东西,因为在编写excel时,
dfe
被转换为不同的顺序:-

df= pd.merge(df,order[['sl','set']].rename({'set':'CATEG'}, axis=1), how='left',on='CATEG')
df = df.sort_values(['sl']).drop('sl', axis=1)  

with pd.ExcelWriter('file.xlsx',options={'nan_inf_to_errors': True}) as writer :
        df.groupby('ID').apply(lambda x: x.dropna(how='all', axis=1).to_excel(writer,sheet_name=str(x.name),na_rep=0,index=True))
writer.save()

即使在更改后,它也会按自己的顺序打印。如何修复它?此外,即使尝试了各种方法,如
float\u format=“%.0f”
或转换为
object
pd.set\u选项('display.float\u format',lambda x:'%0.0f'%x)
,我也无法将Scientific格式写入数字,是否有修复方法,我必须手动更改excel中的数字格式,以获得少数列的数字

您可以通过按所需顺序合并数据帧中的列对值进行排序,然后删除这些列。然后,创建一个数据透视表,注意您设置为
索引
——否则,如果您对
s1
s2
列的顺序不正确,可能会打乱顺序


或者在透视表中不使用
ID
(只需更改下面的代码行,并在代码上方运行此更改):

然后,只需使用:

dfe.to_excel('test.xlsx')

最后一行的
类别是什么?您的预期输出是什么?您是否保留ID和Comments列?@Scope,您在一个问题中有多个问题,我只是使用了
而不是
ExcelWriter
,但这应该可以解决您的核心问题,并且非常接近。行和列按需要排序。如果有帮助,请接受回答并投票。非常感谢。不,格式不正确,所以我不得不更改它,也许你当时看到了。我没有更改任何内容。我想了解订单
级别
part@Scope之前不正确,但现在的输出正是您在第四个代码段中所显示的。顺序应该是
CBAD
,我不能删除重复项,因为每行都是唯一的。哪个步骤设置
PG AB CD
@Scope的顺序是,我忘了使用
.unstack()
再次更改顺序。我还排除了
drop_duplicates()
是的,最后一行代码
df
中的输出数据是数据的外观。我在编写excel之前没有在Pivot之后找到您,对吗?另外,将订单设置为
PG AB CD