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