我遇到的情况是我有两列,其中一列是类别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})
任何帮助都将不胜感激。
答案 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