我有一个数据框:
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
如何避免在数据透视表中排序?
答案 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
以强制执行所需的行顺序。