比较Pandas

时间:2017-10-27 10:44:41

标签: python pandas loops comparison

你好人(我是python的新手) 问题:如何比较具有相同索引但格式不同的两个DataFrame。

以下是DataFrames的两个示例:

datum_von   datum_bis   NEG_00_04                     
2017-10-12  2017-10-12      21.69
2017-10-13  2017-10-13      11.85
2017-10-14  2017-10-14       7.83
2017-10-15  2017-10-15      14.64
2017-10-16  2017-10-16       5.11
2017-10-17  2017-10-17      12.09
2017-10-18  2017-10-18       8.47
2017-10-19  2017-10-19       6.34
2017-10-20  2017-10-20       7.68
2017-10-21  2017-10-21      13.40
2017-10-22  2017-10-22      25.53


datum_von   NEG_00_04  NEG_04_08  NEG_08_12  NEG_12_16  NEG_16_20  NEG_20_24                                                                 
2017-10-12      21.69      15.36       0.87       1.42       0.76       0.65   
2017-10-13      11.85       8.08       1.39       2.86       1.02       0.55   
2017-10-14       7.83       5.88       1.87       2.04       2.29       2.18   
2017-10-15      14.64      11.28       2.62       3.35       2.13       1.25   
2017-10-16       5.11       5.82       0.00       0.00       0.00       0.00   
2017-10-17      12.09       9.61       0.20       1.09       0.39       0.57   
2017-10-18       8.47       7.39       0.24       3.51       0.48       0.61 

请注意,它们具有相同的索引但列的名称不同(我尝试使用d.columns = list_of_names也没有使用它)

它们看起来不一样但它们是相同的(包含相同的信息)但我没有复制所有数据。我想知道哪些值不同以及差异有多大

期望的输出:我希望逐个单元格区分两个日期帧值的区别我是指来自d1的单元格[0] [0] - 来自df2的单元格[0] [0]新日期框架中的所有结果

确定:我组织起来,现在他们有某种相同的组织

dfres = res0.pivot(index='datum_von', columns='produktname')['max']

3 个答案:

答案 0 :(得分:1)

使用解决方案

更好用:

dfres = res0.pivot(index='datum_von', columns='produktname', values='max')
dfdiff=dfres.sub(finaldf)

然后:

mask = dfdiff < 0
df = dfdiff.loc[mask.any(axis=1), mask.any()]]

如果相同的列和索引值为dfdiff,也可以过滤原始DataFrame:

dfa = dfres.loc[mask.any(axis=1), mask.any()]]
dfb = finaldf.loc[mask.any(axis=1), mask.any()]]

答案 1 :(得分:0)

我同意你应该更加具体地说明你想要的输出,但是它很可能会沿着这些方向发展

 cols_overlap = [ c for c in df1.columns if c in df2.columns]
 dfn = df1.merge(df2, how='inner', left_index=True, right_index=True, suffixes=('_df1','_df2'))

 for c in cols_overlap:
      print('%s' % c)
      print((dfm[c+'_df1']==dfm[c+'_df2'] ).all())

答案 2 :(得分:0)

我用它来组织我的数据框格式相同

dfres = res0.pivot(index='datum_von', columns='produktname')['max']

然后我用它来计算差异

dfdiff=dfres.subtract(finaldf)