比较两个日期框架和设置值

时间:2017-11-02 12:36:40

标签: python pandas loops series

我有一个问题,我不确定应该使用什么功能来执行它。我有两个日期框架,如果一个(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 

提前致谢

1 个答案:

答案 0 :(得分:5)

如果两个DataFrame都有相同的索引和列值,并且所有数据都是数字使用here

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

编辑:

如果列相同,produktname中只有dfres0列的差异,请先将其删除:

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