Skip to main content
 首页 » 编程设计

python之比较两个数据帧和设置值

2025年05月04日20Free-Thinker

我有一个问题,我不确定应该使用什么函数来执行它。我有两个日期框架,如果一个 (finaldf) 中的值高于另一个 (dfres0) 中的值,并且我想在 (finaldf) 中将它们设置为零,我想在其中进行两个比较。以下是此日期框架的一些示例:

finaldf

..             NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24  \ 
datum_von                                                                       
2017-10-18       9.58       8.08       0.39       2.32       0.54       0.60    
2017-10-19       6.34       6.20       0.15       1.32       0.46       0.56    
2017-10-20       7.68       5.86       0.29       1.04       0.48       0.54    
2017-10-21      13.40      10.52       2.50       3.09       2.97       2.44    
2017-10-22      25.53      17.33       4.05      12.62       2.35       1.14 

dfres0

... produktname  NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24  \ 
datum_von                                                                        
2017-10-18      12.440     11.012      0.604      4.189      0.900      0.912    
2017-10-19      10.144      8.880      0.465      2.700      0.740      0.832    
2017-10-20      10.370      8.280      0.394      1.970      0.694      0.732    
2017-10-21      14.207     10.800      1.940      2.940      2.334      2.164    
2017-10-22      24.750     20.285      3.900     18.241      2.476      1.870  

提前致谢

请您参考如下方法:

如果 DataFrame 具有相同的索引和列值,并且所有数据都是数字,则使用 mask :

df = finaldf.mask(finaldf > dfres0, 0) 
print (df) 
            NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24 
datum_von                                                                    
2017-10-18       9.58       8.08       0.39       2.32       0.54       0.60 
2017-10-19       6.34       6.20       0.15       1.32       0.46       0.56 
2017-10-20       7.68       5.86       0.29       1.04       0.48       0.54 
2017-10-21      13.40      10.52       0.00       0.00       0.00       0.00 
2017-10-22       0.00      17.33       0.00      12.62       2.35       1.14 

详细信息:

print (finaldf > dfres0) 
            NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24 
datum_von                                                                    
2017-10-18      False      False      False      False      False      False 
2017-10-19      False      False      False      False      False      False 
2017-10-20      False      False      False      False      False      False 
2017-10-21      False      False       True       True       True       True 
2017-10-22       True      False       True      False      False      False 

编辑:

如果列相同,唯一的区别是 dfres0 中的 produktname 列,然后先将其删除:

df = finaldf.mask(finaldf > dfres0.drop('produktname', axis=1), 0)