Python сравнивает и подсчитывает значения строк - PullRequest
0 голосов
/ 20 сентября 2018

Я хотел бы сравнивать два столбца строка за строкой и считать, когда определенное значение в каждой строке неверно.Например:

group       landing_page 
control     new_page
control     old_page
treatment   new_page
treatment   old_page
control     old_page

Я бы хотел посчитать, сколько раз treatment не равно new_page или control не равно old_page.Я думаю, что это может быть и наоборот, иначе treatment равно new_page.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Это звучит как работа для функции zip () .

Сначала настройте свои входы и счетчики:

group = ["control", "control", "treatment", "treatment", "control"]
landingPage = ["new_page", "old_page", "new_page", "old_page", "old_page"]

treatmentNotNew = 0
controlNotOld = 0

Затем выполните сжатие двух входов, которые высравниваются в итератор кортежей:

zipped = zip(group, landingPage)

Теперь вы можете перебирать значения кортежей a (группа) и b (десантный апге) при подсчете каждый раз, когда treatment != new_page и control != old_page:

for a, b in zipped:
    if((a == "treatment") and (not b == "new_page")):
        treatmentNotNew += 1

    if((a == "control") and (not b == "old_page")):
        controlNotOld += 1

Наконец, напечатайте свой результат!

print("treatmentNotNew = " + str(treatmentNotNew))
print("controlNotOld = " + str(controlNotOld))

>> treatmentNotNew = 1
>> controlNotOld = 1
0 голосов
/ 21 сентября 2018

Я бы создал новый столбец с map, который отображает ваш желаемый результат с учетом ввода.Затем вы можете легко проверить, равен ли новый столбец сопоставления столбцу landing_page.

df = pd.DataFrame({
    'group': ['control', 'control', 'treatment', 'treatment', 'control'],
    'landing_page': ['old_page', 'old_page', 'new_page', 'old_page', 'new_page']
})

df['mapping'] = df.group.map({'control': 'old_page', 'treatment': 'new_page'})

(df['landing_page'] != df['mapping']).sum()
# 2
0 голосов
/ 20 сентября 2018

Используйте pandas groupby, чтобы найти количество пар групп и целевых страниц.

Снова используйте groupby, чтобы найти количество групп.Чтобы найти число других целевых страниц в каждой группе, вычтите каждое количество целевых страниц из числа групп.

df = pd.DataFrame({'group': ['control', 'control', 'treatment',
                             'treatment', 'control'],
                   'landing_page': ['new_page', 'old_page', 'new_page',
                                    'old_page', 'old_page']})

# find counts per pairing
df_out = df.groupby(['group', 'landing_page'])['landing_page'].count().to_frame() \
    .rename(columns={'landing_page': 'count'}).reset_index()
# find totals for groups
df_out['grp_total'] = df_out.groupby('group')['count'].transform('sum')
# find count not equal to landing page
df_out['inverse_count'] = df_out['grp_total'] - df_out['count']

print(df_out)

       group landing_page  count  grp_total  inverse_count
0    control     new_page      1          3              2
1    control     old_page      2          3              1
2  treatment     new_page      1          2              1
3  treatment     old_page      1          2              1
...