Pandas按列将列转换为多个

时间:2017-05-06 10:46:10

标签: python python-3.x pandas

我遇到的情况是我有两列,其中一列是类别ID,另一列是类别值。由于值对于不同的类别具有不同的含义,因此我想将值提取为单独的列。例如,我想转换

+----+--------+
| id | value  |
+----+--------+
| 1  |      1 |
| 1  |      2 |
| 2  |      1 |
| 2  |      2 |
| 3  |      1 |
| 3  |      2 |
+----+--------+

到此:

+----+---------+---------+---------+
| id | value_1 | value_2 | value_3 |
+----+---------+---------+---------+
|  1 |       1 |       0 |       0 |
|  1 |       2 |       0 |       0 |
|  2 |       0 |       1 |       0 |
|  2 |       0 |       2 |       0 |
|  3 |       0 |       0 |       1 |
|  3 |       0 |       0 |       2 |
+----+---------+---------+---------+

我确信我可以通过一些笨拙的风格操作来做到这一点,但我正在努力更好地掌握大熊猫,并希望以大熊猫的方式做到这一点。

我天真的猜测是使用groupby的内容,但我不确定如何从中生成多个列。

的内容
data.groupby('id').agg({'value': something})

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用get_dummies()并将其乘以value列:

In [58]: df[['id']] \
           .join(pd.get_dummies(df['id']).mul(df['value'], axis=0).add_prefix('value_'))
Out[58]:
   id  value_1  value_2  value_3
0   1        1        0        0
1   1        2        0        0
2   2        0        1        0
3   2        0        2        0
4   3        0        0        1
5   3        0        0        2

说明:

In [53]: pd.get_dummies(df['id'])
Out[53]:
   1  2  3
0  1  0  0
1  1  0  0
2  0  1  0
3  0  1  0
4  0  0  1
5  0  0  1


In [52]: pd.get_dummies(df['id']).mul(df['value'], axis=0)
Out[52]:
   1  2  3
0  1  0  0
1  2  0  0
2  0  1  0
3  0  2  0
4  0  0  1
5  0  0  2