首页 > 解决方案 > 填写熊猫数据框中的“缺失”值

问题描述

我是 Python 新手,不知道如何解决这个问题。也许有人可以帮助我解决问题。

对于 cloumn 中的每个值,x我希望在 column 中有 1-400 的数字y。列x应保持不变(400 次)。在我的数据框中,几乎就是这种情况,但是这个范围内的一些值是随机缺失的,应该添加。每隔一列必须为 0。

这是我的df:

      x         y        value
0       20       1        8.046723    
1       20       2        4.613252     
2       20       3       14.546438     
3       20       4        0.000000        
4       20       8        2.285226                  
...    ...     ...             ...                     
2987    29     394        0.000000                   
2988    29     396        0.000000                     
2989    29     397        0.000000                   
2990    29     398        0.000000                    
2991    29     400        0.000000                     

之后它应该看起来像:

      x         y        value
0       20       1        8.046723    
1       20       2        4.613252     
2       20       3       14.546438     
3       20       4        0.000000
4       20       5        0.000000
5       20       6        0.000000
6       20       7        0.000000           
7       20       8        2.285226                  
...    ...     ...             ...                     
3194    29     394        0.000000
3195    29     395        0.000000                                    
3196    29     396        0.000000                     
3197    29     397        0.000000                   
3198    29     398        0.000000
3199    29     399        0.000000                                        
3200    29     400        0.000000    

标签: pythonpandasdataframe

解决方案


让我们将数据框的索引设置为列xy然后用于pd.MultiIndex.from_product创建一个新索引,其中对于 中的每个唯一值xy包含所有必需的值,最后reindex是这个新创建的索引上的数据框:

out = df.set_index(['x', 'y'])
idx = pd.MultiIndex.from_product([s.index.levels[0], range(1, 401)], names=['x', 'y'])
out = out.reindex(idx, fill_value=0).reset_index()

>>> out

      x    y      value
0    20    1   8.046723
1    20    2   4.613252
2    20    3  14.546438
3    20    4   0.000000
4    20    5   0.000000
5    20    6   0.000000
6    20    7   0.000000
7    20    8   2.285226
8    20    9   0.000000
...  ... ...   ...
794  29  395   0.000000
795  29  396   0.000000
796  29  397   0.000000
797  29  398   0.000000
798  29  399   0.000000
799  29  400   0.000000

推荐阅读