调整数据框的大小

时间:2019-02-21 18:46:41

标签: python python-3.x

我有一个5252行x 3列的数据框

数据看起来像这样

   X       Y      Z
   1       1      2
   1       2      4
   1       3    3.5
   2      13      4
   1       4      3
   2      14    3.5
   3      14      2
   3      15      1
   4      16     .5
   4      18      2
   .       .      .
   .       .      .
   .       .      .
1508     751      1
1508     669      1
1508     686    2.5

我想转换它,所以userid是行,itemid是列,Z是与X和Y对应的数据。

       1  2    3   4  5  6  13   14  15  16  17   18  669  686

   1   2  4  3.5   3  0  0   0    0   0   0   0    0    0    0 
   2   0  0    0   0  0  0   4  4.5   0   0   0    0    0    0
   3   0  0    0   0  0  0   0    2   0   0   0    0    0    0
   4   0  0    0   0  0  0   0    0   0  .5   0    2    0    0
   .
   .
   .
1508   0  0    0   0  0  0   0    0   0   0   0    0    1    1

2 个答案:

答案 0 :(得分:0)

我假设您正在使用pandas库。

您需要pd.pivot_table函数。如果数据框称为df,则需要:

pd.pivot_table(data=df, index="x", columns="y", values="z", aggfunc=sum)

答案 1 :(得分:0)

您需要使用pd.pivot_table()并使用fillna(0)。重新创建示例数据框:

import pandas as pd

df = pd.DataFrame({'X': [1,1,1,1,2,2,3,3,4], 'Y': [1,2,3,4,13,14,14,15,16], 'Z': [2,4,3.5,3,4,3.5,2,1,.5]})

礼物:

   X   Y    Z
0  1   1  2.0
1  1   2  4.0
2  1   3  3.5
3  1   4  3.0
4  2  13  4.0
5  2  14  3.5
6  3  14  2.0
7  3  15  1.0
8  4  16  0.5

然后使用pd.pivot_table()

pd.pivot_table(df, values='Z', index=['X'], columns=['Y']).fillna(0)

收益:

Y   1    2    3    4    13   14   15   16
X                                        
1  2.0  4.0  3.5  3.0  0.0  0.0  0.0  0.0
2  0.0  0.0  0.0  0.0  4.0  3.5  0.0  0.0
3  0.0  0.0  0.0  0.0  0.0  2.0  1.0  0.0
4  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.5