你好人(我是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']
答案 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)