在熊猫矩阵[python]中添加值0并填充缺失的列

时间:2020-08-07 13:16:11

标签: python pandas matrix indexing

我有一个形式为的矩阵:

movie_id   1     2     3     ...   1494    1497   1500
user_id                                                               
1600       1.0   0.0   1.0   ...   0.0     0.0    1.0
1601       1.0   0.0   0.0   ...   1.0     0.0    0.0
1602       0.0   0.0   0.0   ...   0.0     1.0    1.0
1603       0.0   0.0   1.0   ...   0.0     0.0    0.0
1604       1.0   0.0   0.0   ...   1.0     0.0    0.0
.          ...
.
.

如您所见,即使我的数据集中的电影是1500个,也有一些电影尚未录制,这是由于我的数据已经过预处理的原因。

我想要的是添加并填充所有未记录的列(movie_ids),其值为0(我不知道尚未正确记录哪些movie_ids)。因此,例如,我想要一个新的矩阵形式:

movie_id   1     2     3     ...   1494    1495   1496 1497 1498 1499 1500
user_id                                                               
1600       1.0   0.0   1.0   ...   0.0     0.0    0.0  0.0  0.0  0.0  1.0
1601       1.0   0.0   0.0   ...   1.0     0.0    0.0  0.0  0.0  0.0  0.0 
1602       0.0   0.0   0.0   ...   0.0     0.0    0.0  1.0  0.0  0.0  1.0
1603       0.0   0.0   1.0   ...   0.0     0.0    0.0  0.0  0.0  0.0  0.0
1604       1.0   0.0   0.0   ...   1.0     0.0    0.0  0.0  0.0  0.0  0.0
.          ...
.
.

2 个答案:

答案 0 :(得分:1)

DataFrame.reindexaxis=1fill_value=0一起使用,以使数据框列符合新的索引范围:

df = df.reindex(range(df.columns.min(), df.columns.max() + 1), axis=1, fill_value=0)

结果:

movie_id     1     2     3      1498  1499  1500
user_id                                     
1600       1.0   0.0   1.0         0     0   1.0
1601       1.0   0.0   0.0         0     0   0.0
1602       0.0   0.0   0.0 ...     0     0   1.0
1603       0.0   0.0   1.0 ...     0     0   0.0
1604       1.0   0.0   0.0         0     0   0.0

答案 1 :(得分:1)

我假设矩阵的变量名称为matrix

n_moovies = 1500
moove_ids = matrix.columns

for moovie_id in range(1, n_moovies + 1):
    # iterate over id-s
    if moovie_id not in moove_ids:
        # if there's no such moovie create a column filled with zeros
        matrix[moovie_id] = 0