оператор if при сравнении строк в 2 фреймах данных в python - PullRequest
2 голосов
/ 26 января 2020

У меня есть 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) если каждый счетчик строк (столбец result1) в data11 равен каждому счетчику строк (result2) в data33, выведите «все строки совпадают» (здесь не отображаются совпадающие строки)

ii) иначе выведите «следующие строки не удалось» (и показывает строки, которые не были выполнены как в data11, так и в data33)

Спасибо!

1 Ответ

2 голосов
/ 26 января 2020

Первый concat для одного кадра данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...