熊猫数据框重塑

时间:2015-09-01 10:54:58

标签: python pandas dataframe

这是我的数据框:

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_indexunstack

尝试了很多内容

这是我解决问题的最佳尝试

df.set_index(['ID', 'name1', 'name2']).unstack('name1').unstack('name2')

只需执行此操作即可R使用tidyr包轻松解决此问题

df %>%
  spread(name1, T1_val) %>%
  spread(name2, C1_val)

1 个答案:

答案 0 :(得分:2)

使用.pivot_table后跟concat

item = group[1]