如何避免按索引排​​序数据透视表

时间:2017-07-09 12:41:21

标签: python pandas

我有一个数据框:

t1=r.data[(r.data['test_num']==2) & (r.data['el_num'] < 4)]

     test_num  el_num  file_num     dose  is_anneal     value   fail
99          2       1         0    100.0      False -0.000056  False
100         2       1         1   5052.0      False -0.000056  False
101         2       1         2  10107.0      False -0.000056  False
102         2       1         3  16561.0      False -0.000056  False
103         2       1         4  22536.0      False -0.000056  False
104         2       1         5  25020.0      False -0.000056  False
105         2       1         6  35123.0      False -0.000056  False
106         2       1         7     24.0       True -0.000056  False
107         2       1         8    168.0       True -0.000055  False
108         2       2         0    100.0      False -0.000056  False
109         2       2         1   5052.0      False -0.000056  False
110         2       2         2  10107.0      False -0.000056  False
111         2       2         3  16561.0      False -0.000056  False
112         2       2         4  22536.0      False -0.000056  False
113         2       2         5  25020.0      False -0.000056  False
114         2       2         6  35123.0      False -0.000056  False
115         2       2         7     24.0       True -0.000056  False
116         2       2         8    168.0       True -0.000055  False
117         2       3         0    100.0      False -0.000060  False
118         2       3         1   5052.0      False -0.000061  False
119         2       3         2  10107.0      False -0.000061  False
120         2       3         3  16561.0      False -0.000061  False
121         2       3         4  22536.0      False -0.000061  False
122         2       3         5  25020.0      False -0.000061  False
123         2       3         6  35123.0      False -0.000061  False
124         2       3         7     24.0       True -0.000061  False
125         2       3         8    168.0       True -0.000061  False

当我想创建数据透视表时,我明白了:

print(t1.pivot(index='dose',columns='el_num',values='value'))

el_num          1         2         3
dose                                 
24.0    -0.000056 -0.000056 -0.000061
100.0   -0.000056 -0.000056 -0.000060
168.0   -0.000055 -0.000055 -0.000061
5052.0  -0.000056 -0.000056 -0.000061
10107.0 -0.000056 -0.000056 -0.000061
16561.0 -0.000056 -0.000056 -0.000061
22536.0 -0.000056 -0.000056 -0.000061
25020.0 -0.000056 -0.000056 -0.000061
35123.0 -0.000056 -0.000056 -0.000061

但我希望dose列有一个类似主表的订单:

100.0
5052.0
10107.0
16561.0
22536.0
25020.0
35123.0
24.0
168.0

如何避免在数据透视表中排序?

2 个答案:

答案 0 :(得分:2)

您可以使用类似<form #myForm="ngForm" (ngSubmit)="onSubmit(myForm)" novalidate> <ng-template *ngFor="let con of controls"> <div class="form-group" *ngIf="con.type != 'submit'"> <label for="{{con.id}}">{{con.label}}</label> <input [(ngModel)]="con.name" type="{{con.type}}" class="{{con.class}}" name="{{con.id}}" /> </div> <input *ngIf="con.type == 'submit'" type="submit" class="{{con.class}}" [value]="con.label" /> </form> 的解决方案,但如果重复,则汇总值:

pivot_table

另一种解决方案是使用df = t1.groupby(['dose','el_num'], sort=False)['value'].mean().unstack() print (df) el_num 1 2 3 dose 100.0 -0.000056 -0.000056 -0.000060 5052.0 -0.000056 -0.000056 -0.000061 10107.0 -0.000056 -0.000056 -0.000061 16561.0 -0.000056 -0.000056 -0.000061 22536.0 -0.000056 -0.000056 -0.000061 25020.0 -0.000056 -0.000056 -0.000061 35123.0 -0.000056 -0.000056 -0.000061 24.0 -0.000056 -0.000056 -0.000061 168.0 -0.000055 -0.000055 -0.000061 ,然后使用reindex按自定义顺序:

pivot

答案 1 :(得分:1)

由于file_num已按所需顺序排序,您可以使用

(t1.set_index(['file_num','dose','el_num']['value']
   .unstack('el_num').reset_index('file_num', drop=True))

产生

el_num          1         2         3
dose                                 
100.0   -0.000056 -0.000056 -0.000060
5052.0  -0.000056 -0.000056 -0.000061
10107.0 -0.000056 -0.000056 -0.000061
16561.0 -0.000056 -0.000056 -0.000061
22536.0 -0.000056 -0.000056 -0.000061
25020.0 -0.000056 -0.000056 -0.000061
35123.0 -0.000056 -0.000056 -0.000061
24.0    -0.000056 -0.000056 -0.000061
168.0   -0.000055 -0.000055 -0.000061

set_index/unstack操作类似于旋转,但它允许使用多个列作为索引。包含file_num以强制执行所需的行顺序。