熊猫& python:以许多列作为索引的unstack或pivot?

时间:2018-02-14 21:55:06

标签: python pandas

我有一个如下数据框:

    A     B    C   Property   Value
1   Bob  b100  X1  prop1      a
2   Bob  b100  X1  prop2      b
3   Bob  b100  X2  prop1      c
4   Bob  b100  Y1  prop1      a
5   Bob  b100  Z   prop9      b
6   Bob  b200  X1  prop1      c
7   Bob  b200  X1  prop2      d

如何使用unstack,pivot或其他方法仅展开Property和Value列?

我正在尝试获取以下数据框:

    A     B    C   prop1  prop2   prop9
1   Bob  b100  X1  a        b       -
2   Bob  b100  X2  c        -       -
3   Bob  b100  Y1  a        a       -
4   Bob  b100  Z   -        -       b
5   Bob  b200  X1  c        d       -

2 个答案:

答案 0 :(得分:4)

In [115]: (df.pivot_table(index=['A','B','C'], columns='Property', values='Value',
     ...:                 aggfunc='first', fill_value='-')
     ...:    .reset_index()
     ...:    .rename_axis(None,1))
     ...:
Out[115]:
     A     B   C prop1 prop2 prop9
0  Bob  b100  X1     a     b     -
1  Bob  b100  X2     c     -     -
2  Bob  b100  Y1     a     -     -
3  Bob  b100   Z     -     -     b
4  Bob  b200  X1     c     d     -

或使用unstack

In [124]: (df.set_index(['A','B','C','Property'])
     ...:    ['Value'].unstack('Property', fill_value='-')
     ...:    .reset_index()
     ...:    .rename_axis(None,1))
     ...:
Out[124]:
     A     B   C prop1 prop2 prop9
0  Bob  b100  X1     a     b     -
1  Bob  b100  X2     c     -     -
2  Bob  b100  Y1     a     -     -
3  Bob  b100   Z     -     -     b
4  Bob  b200  X1     c     d     -

答案 1 :(得分:0)

这是使用arr的另一种解决方案。还添加了一些基准测试用于比较。

pd.get_dummies