假设我有一个包含列的数据框:id1,id2,valueType,value。
首先,我想转动数据框以附加不同可能值类型的列(valueType.unique()?)。然后,对于每个值,我想将它映射到行中具有相应id1,id2的正确valueType列。我想我还需要考虑这样一个事实,即新的旋转列的长度不一定相等(即某些valueType看起来比其他值更频繁)所以我必须先用NaN填充它们。什么是最好的方法?我猜我会在数据帧上使用pivot()和set_index()吗?
输入df
id1 id2 valuetype value
0 1 a height 5
1 1 a width 4
2 1 a length 3
3 1 b height 6
4 1 b width 5
5 1 c length 4
6 2 a height 3
7 2 a width 6
8 2 b height 7
9 2 b length 8
10 2 c height 9
11 2 c width 5
预期产出
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
答案 0 :(得分:2)
使用pivot_table
In [401]: (df.pivot_table(index=['id1', 'id2'], columns='valuetype', values='value')
.reset_index().rename_axis(None, 1))
Out[401]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
或者,使用groupby
In [404]: (df.groupby(['id1', 'id2', 'valuetype'])['value'].sum().unstack()
.reset_index().rename_axis(None, 1))
Out[404]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0
或者,使用set_index
In [414]: (df.set_index(['id1', 'id2', 'valuetype'])['value'].unstack()
.reset_index().rename_axis(None, 1))
Out[414]:
id1 id2 height length width
0 1 a 5.0 3.0 4.0
1 1 b 6.0 NaN 5.0
2 1 c NaN 4.0 NaN
3 2 a 3.0 NaN 6.0
4 2 b 7.0 8.0 NaN
5 2 c 9.0 NaN 5.0