You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas DataFrame验证EBTD=EBIT且EBTN=EBTG并输出指定信息

按年份验证EBTD/EBIT、EBTN/EBTG值相等的问题解决

需求说明

需验证每个年份下:

  • EBTD 与 EBIT 的值相等
  • EBTN 与 EBTG 的值相等
    当两个条件同时满足时,输出EBTD == EBIT and EBTN == EBTG

用户代码的问题分析

  1. 列名大小写不匹配:原数据中年份列名为Year,但合并时写的是on=['year'],导致合并逻辑失效
  2. 合并逻辑错误:仅按年份合并,未建立EBTD→EBIT、EBTN→EBTG的对应关系,合并后数据行混乱,无法正确对比目标指标
  3. 判断逻辑缺失:循环中仅判断单行的value_x与value_y相等,未同时验证同一年份下的两个条件,且无条件直接打印结果

正确实现代码

import pandas as pd

# 模拟用户提供的df1和df2数据
df1 = pd.DataFrame({
    'tag': ['EBTD', 'EBTD', 'EBTN', 'EBTN'],
    'Year': ['2019/03/31', '2019/06/30', '2019/03/31', '2019/06/30'],
    'Value': [61847, 61847, 61847248, 61847248],
    'series_id': [0, 0, 0, 0]
})

df2 = pd.DataFrame({
    'tag': ['EBIT', 'EBIT', 'EBTG', 'EBTG'],
    'Year': ['2019/03/31', '2019/06/30', '2019/03/31', '2019/06/30'],
    'Value': [61847, 61847, 61847248, 61847248],
    'series_id': [0, 0, 0, 0]
})

# 1. 将df1转换为宽表:Year为索引,tag为列,值为Value
df1_wide = df1.pivot(index='Year', columns='tag', values='Value').reset_index()
# 2. 将df2转换为宽表
df2_wide = df2.pivot(index='Year', columns='tag', values='Value').reset_index()

# 3. 按年份合并两个宽表
merged_df = pd.merge(df1_wide, df2_wide, on='Year', how='inner')

# 4. 验证每个年份的两个条件是否同时满足
for _, row in merged_df.iterrows():
    if row['EBTD'] == row['EBIT'] and row['EBTN'] == row['EBTG']:
        print(f"年份 {row['Year']}: EBTD == EBIT and EBTN == EBTG")

代码说明

  • 先将长表转宽表,让同一年份的EBTD、EBTN在同一行,EBIT、EBTG也在同一行,方便直接对比
  • 合并后通过一行代码同时验证两个条件,确保逻辑严谨
  • 输出时带上年份,清晰展示每个年份的验证结果

内容的提问来源于stack exchange,提问作者Hrithik Modi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:25:21