我遇到过这样一种情况,我有两列,其中一列是类别 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 |
+----+---------+---------+---------+
我确信我可以通过一些 numpy 风格的操作来做到这一点,但我正在努力更好地掌握 pandas,并希望以 pandas-y 的方式来做到这一点。
我天真的猜测是使用 groupby
的东西,但我不确定如何从中生成多个列。类似的东西
data.groupby('id').agg({'value': something})
如有任何帮助,我们将不胜感激。
最佳答案
你可以使用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
关于python - Pandas 按组将列转换为多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43819500/