python - 比较不同 Pandas 数据框中的列

标签 python pandas dataframe

我有两个数据框,一个是从 1990 年开始的每日信息,另一个是从 2000 年开始的每日信息。两个数据框都包含到 2016 年结束的信息。

df1:

   Date       A     B     C 
1990-01-01   3.0  40.0  70.0  
1990-01-02  20.0  50.0  80.0  
1990-01-03  30.0  60.0  90.0  
1990-01-04   2.0   1.0   1.0 
1990-01-05   1.0   8.0   3.0  

df2:

   Date       A     B     C 
2000-01-01   NaN   NaN   NaN  
2000-01-02   5.0   NaN   NaN  
2000-01-03   1.0   NaN   5.0  
2000-01-04   2.0   4.0   8.0 
2000-01-05   1.0   3.0   4.0 

我需要比较 df1 和 df2 中具有相同名称的列,这通常不会太复杂,但我需要从两者 给定列的数据帧(例如来自 df22000-01-02'A'2000-01- 'B' 中的 04)。如果从那时起它们相同,我需要返回 True,如果它们不同,我需要返回 False。我从合并开始,这给了我:

df2.merge(df1, how = 'left', on = 'Date')


   Date      A.x   B.x   C.x   A.y   B.y   C.y   
2000-01-01   NaN   NaN   NaN   3.0   4.0   5.0
2000-01-02   5.0   NaN   NaN   5.0   9.0   2.0
2000-01-03   1.0   NaN   5.0   1.0   6.0   5.0
2000-01-04   2.0   4.0   8.0   2.0   4.0   1.0
2000-01-05   1.0   3.0   4.0   1.0   3.0   3.0

我已经弄清楚如何找到共同的日期,但对如何进行相同/不同的比较感到困惑。谁能帮我从有共同值(value)的地方比较列?字典是一种有用的输出格式,但不是必需的:

comparison_dict = {
    "A" : True,
    "B" : True,
    "C" : False
}

非常感谢。

最佳答案

假设 Date 列是索引。

  1. 堆叠默认会掉nan
  2. “内部”逻辑保持一致
  3. 检查是否相等
  4. 分组并检查所有True

pd.Series.eq(*df1.stack().align(df2.stack(), 'inner')).groupby(level=1).all()

如果Date不是索引

pd.Series.eq(
    *df1.set_index('Date').stack().align(
        df2.set_index('Date').stack(), 'inner'
    )
).groupby(level=1).all()

关于python - 比较不同 Pandas 数据框中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52119585/

相关文章:

python - 如何在 Python 中展平其中一列包含 json 对象的数据框?

python - 在其他 df Pandas 下添加 df

python - 在图中找到最长的路径

python - 需要正则表达式来查找字符串中的\n或\r

python - 如何在没有 csv 索引 header 的情况下编写行?

python - pandas 在 Python 中合并时删除索引索引?

python - 无法打印 df.shape,我从 pandas 中以数据帧格式读取它

python - Win10上的PIL模块保存功能仅返回黑色图像

python - 为什么 Pandas qcut 给我大小不等的垃圾箱?

python - Pandas:合并数据帧并仅保留与合并的唯一对关联的最小值