按特定的用户定义顺序对数据透视表数据帧的索引进行排序

范围

这是我的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 

我创建pivot这样的:

df=pd.pivot_table(dfe,index=['ID','CATEG','LEVEL'],columns='COLS',values=['VALUE'])

我想将df按照索引的特定顺序写入excel,CATEG并且LEVEL我想CATEG根据另一个df对df进行排序order:-

sl set
1   C
2   B
3   A
4   D

LEVEL按此顺序:- PG AB CD此顺序对于所有dfedf都不会更改并保持不变,但是CATEG更改和order仅需根据df进行设置

          Apple     Orange      
CATEG   PG  AB  CD  PG  AB  CD
C                       
B                       
A                       
D   

我尝试了很多事情,但错过了一些东西,因为dfe在写excel时被转换为不同的顺序:-

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()

即使更改了它的解决方法,它也会按自己的顺序打印?我也无法将scientifc格式写为数字,即使尝试了诸如float_format="%.0f"或转换为objector之类的各种方法后pd.set_option('display.float_format', lambda x: '%.0f' % x),是否也有解决方法,我必须在excel中手动更改数字格式以获取几列的数字

戴维·埃里克森

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


df1 = pd.DataFrame({'s1': {0: 1, 1: 2, 2: 3, 3: 4}, 'set': {0: 'C', 1: 'B', 2: 'A', 3: 'D'}})
df2 = pd.DataFrame({'s2': {0: 1, 1: 2, 2: 3}, 'LEVEL': {0: 'PG', 1: 'AB', 2: 'CD'}})
dfe = (dfe[['ID','CATEG','LEVEL','COLS','VALUE']]
        .merge(df1.rename({'set' : 'CATEG'}, axis=1),how='left',on='CATEG')
        .merge(df2, how='left', on='LEVEL'))
dfe = pd.pivot_table(dfe,index=['ID','s1','CATEG'],columns=['COLS','s2','LEVEL'],values=['VALUE'])
dfe.columns = dfe.columns.droplevel([0,2])
dfe = dfe.reset_index().drop(('s1',''), axis=1).set_index('CATEG')
dfe
Out[1]: 
COLS  ID  Apple                      Orange                     
LEVEL        PG     AB     CD            PG            AB     CD
CATEG                                                           
C      1  226.0  884.0  288.0           NaN           NaN    NaN
B      1  712.0  849.0    NaN           NaN           NaN    NaN
A      1  428.0    NaN  175.0           NaN           NaN    NaN
B      2    NaN    NaN  376.0           NaN           NaN  135.0
A      2    NaN    NaN    NaN           NaN  1.000000e+13    NaN
D      2    NaN    NaN    NaN  1.000000e+15           NaN    NaN

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

dfe = pd.pivot_table(dfe,index=['s1','CATEG'],columns=['COLS','s2','LEVEL'],values=['VALUE'])

COLS   Apple                      Orange                     
LEVEL     PG     AB     CD            PG            AB     CD
CATEG                                                        
C      226.0  884.0  288.0           NaN           NaN    NaN
B      712.0  849.0  376.0           NaN           NaN  135.0
A      428.0    NaN  175.0           NaN  1.000000e+13    NaN
D        NaN    NaN    NaN  1.000000e+15           NaN    NaN

然后,只需使用:

dfe.to_excel('test.xlsx')

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何按用户定义的顺序对数据帧进行排序(例如,非字母顺序)

如何避免按索引对数据透视表进行排序

按特定值顺序对数据表进行排序

无法按日期对数据透视表进行排序

按R中的特定顺序对数据帧中的列进行排序

根据向量以特定顺序对数据帧行进行排序

如何在数据透视表之后对Dask中的索引进行排序

在R中按特定顺序对数据进行排序

按自定义列表顺序对数据表进行排序

按这些数据帧的名称的字母顺序对数据帧列表进行排序

Excel自定义列表对数据透视表的数据透视字段(列)进行排序

如何按顺序按每个对象中的值对数组中对象的索引进行排序

按索引对数据框进行排序

按日期对Pandas数据框列索引进行排序

根据数据降序对熊猫系列进行排序,然后按字母顺序优雅地对索引进行排序

如何按子类别的不同计数对数据框/数据透视表进行排序?

如何按字母顺序按索引值对数据框的列进行排序

如何在R中按预定的因子级别顺序对数据帧进行排序?

如何在数据透视表中按字母数字顺序对列数据进行排序?

如何在Pandas中对数据透视表进行排序

对数据透视表中的字段和值进行排序

如何根据数字部分对数据框的索引进行排序?

数据操作 - 添加额外的索引列并按字母顺序对索引进行排序

如何按字母顺序对索引进行排序

c# - 如何按大小写顺序对数据表进行排序#

Rails如何按特定顺序对数据库中的记录进行排序?

按varchar字母顺序对数据进行排序

按给定列表中的ID顺序对数据进行排序

如何按数字顺序对数据路径进行排序?