这是我的数据框:
df = pd.DataFrame({'C1_val': {1: 1.1,2: 2.6,3: 1.1,4: 2.6,5: 1.8,6: 3.6,7: 1.8,8: 3.6},
'ID': {1: 'x1',2: 'x1',3: 'x1',4: 'x1',5: 'x2',6: 'x2',7: 'x2',8: 'x2'},
'T1_val': {1: 1.1,2: 1.1,3: 2.2,4: 2.2,5: 1.8,6: 1.8,7: 7.9,8: 7.9},
'name1': {1: 'T1',2: 'T1',3: 'T2',4: 'T2',5: 'T1',6: 'T1',7: 'T2',8: 'T2'},
'name2': {1: 'C1',2: 'C2',3: 'C1',4: 'C2',5: 'C1',6: 'C2',7: 'C1',8: 'C2'}})
它看起来像这样:
C1_val ID T1_val name1 name2
1 1.1 x1 1.1 T1 C1
2 2.6 x1 1.1 T1 C2
3 1.1 x1 2.2 T2 C1
4 2.6 x1 2.2 T2 C2
5 1.8 x2 1.8 T1 C1
6 3.6 x2 1.8 T1 C2
7 1.8 x2 7.9 T2 C1
8 3.6 x2 7.9 T2 C2
我想重塑数据,就像这样
final_res = pd.DataFrame({'C1': {1: 1.1, 2: 1.8},
'C2': {1: 2.6, 2: 3.6},
'ID': {1: 'x1', 2: 'x2'},
'T1': {1: 1.1, 2: 1.8},
'T2': {1: 2.2, 2: 7.9}})
最终结果将是:
ID T1 T2 C1 C2
1 x1 1.1 2.3 1.1 2.6
2 x2 1.8 7.9 1.8 3.6
我使用pivot
函数或同时使用set_index
和unstack
这是我解决问题的最佳尝试
df.set_index(['ID', 'name1', 'name2']).unstack('name1').unstack('name2')
只需执行此操作即可R
使用tidyr
包轻松解决此问题
df %>%
spread(name1, T1_val) %>%
spread(name2, C1_val)