如何用Pandas DataFrame验证EBTD=EBIT且EBTN=EBTG并输出指定信息
按年份验证EBTD/EBIT、EBTN/EBTG值相等的问题解决
需求说明
需验证每个年份下:
- EBTD 与 EBIT 的值相等
- EBTN 与 EBTG 的值相等
当两个条件同时满足时,输出EBTD == EBIT and EBTN == EBTG
用户代码的问题分析
- 列名大小写不匹配:原数据中年份列名为
Year,但合并时写的是on=['year'],导致合并逻辑失效 - 合并逻辑错误:仅按年份合并,未建立EBTD→EBIT、EBTN→EBTG的对应关系,合并后数据行混乱,无法正确对比目标指标
- 判断逻辑缺失:循环中仅判断单行的
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
相关产品推荐
相关产品推荐

