【问题标题】:if statement when comparing rows in 2 data frames in python比较python中2个数据帧中的行时的if语句
【发布时间】:2020-05-12 02:23:01
【问题描述】:

我有 2 个数据框 data2 和 data3:

data0 = {
    'state':  ['CA', 'CA', 'OH'],
    'year':   [2012, 2014, 2010],
    's': [2000, 4000, 5000]
     }
data1=pd.DataFrame(data0)

data2 = {
    'state':  ['CA', 'CA', 'OH'],
    'year':   [2012, 2014, 2010],
    's': [2000, 4000, None]
     }
data3=pd.DataFrame(data2)

首先我想按州和年份计算 s:

data11 = data1.groupby(['state', 'year'])['s'].agg({'result1': 'count'})
data33 = data3.groupby(['state', 'year'])['s'].agg({'result2': 'count'})

问题是如何写一个陈述

i) 如果 data11 中的每个行数(result1 列)都等于 data33 中的每个行数(result2),则打印“所有行匹配”(此处不显示匹配行)

ii) 否则打印“以下行失败”(并显示 data11 和 data33 中失败的行)

谢谢!

【问题讨论】:

  • 你有什么尝试吗?你读过 Pandas 文档吗?

标签: python pandas dataframe if-statement match


【解决方案1】:

第一个 concat 用于一个 DataFrame:

df = pd.concat([data11, data33], axis=1)
print (df)
            result1  result2
state year                  
CA    2012        1        1
      2014        1        1
OH    2010        1        0

然后将两列与Series.eq (==) 进行比较,并通过Series.all 测试所有行是否匹配,如果不匹配则通过~ 的反向掩码过滤不匹配的行:

m = df['result1'].eq(df['result2'])
if m.all():
    print ("all rows matched")
else:
    print ("the following rows failed")
    print (df[~m])

the following rows failed
            result1  result2
state year                  
OH    2010        1        0

【讨论】:

  • 这正是我想要的答案——非常感谢 jezrael!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 2023-01-25
  • 2021-12-14
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多