在python中比较两个数据帧中的行时的if语句
我有两个数据帧data2和data3:在python中比较两个数据帧中的行时的if语句,python,pandas,dataframe,if-statement,match,Python,Pandas,Dataframe,If Statement,Match,我有两个数据帧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': [20
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)
首先,我想按州和年份统计人口:
data11 = data1.groupby(['state', 'year'])['s'].agg({'result1': 'count'})
data33 = data3.groupby(['state', 'year'])['s'].agg({'result2': 'count'})
问题是如何写一个声明
i) 如果data11中的每行计数(result1列)等于data33中的每行计数(result2),则打印“所有匹配行”(此处不显示匹配行)
ii)else打印“以下行失败”(并显示从data11和data33失败的行)
谢谢 一个数据帧的第一个:
df = pd.concat([data11, data33], axis=1)
print (df)
result1 result2
state year
CA 2012 1 1
2014 1 1
OH 2010 1 0
然后将这两列与(==
)进行比较,并测试是否所有行都匹配,如果不匹配,则通过~
反向掩码过滤不匹配的行:
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