首页 > 解决方案 > Python Pandas 中的 COUNTIFS

问题描述

我正在尝试使用以下数据框在 Python pandas 中锻炼 countifs 函数。


import pandas as pd

df = pd.DataFrame({'var_1': ['B 1','B 2','B 3','B 4','B 5','B 6','B 7','B 4','B 8','B 1','B 3','B 9','B 7','B 6','B 4','B 2','B 4','B 4','B 3','B 7','B 7','B 7','B 9','B 4','B 3','B 1','B 2','B 4','B 4','B 2','B 1','B 3','B 9','B 4','B 2','B 4','B 9','B 1','B 10','B 4','B 3','B 8','B 4','B 3','B 2','B 1','B 4','B 7','B 4','B 3','B 1','B 2','B 8','B 11','B 4','B 2','B 7','B 4','B 7','B 3','B 1','B 4','B 9','B 1','B 3','B 4','B 2','B 4','B 2','B 3','B 1','B 4','B 4','B 7','B 4','B 2','B 8','B 1','B 3','B 6','B 2','B 4','B 5','B 1','B 4','B 7','B 4','B 2','B 1','B 4','B 2','B 8','B 9','B 4','B 2','B 3','B 1','B 4','B 12','B 1'],'var_2': ['B 1','B 2','B 3','B 4','B 5','B 6','B 7','B 4','B 8','B 1','B 3','B 9','B 7','B 6','B 4','B 2','B 4','B 4','B 3','B 7','B 7','B 7','B 9','B 4','B 3','B 1','B 2','B 4','B 4','B 2','B 1','B 3','B 9','B 4','B 2','B 4','B 9','B 1','B 10','B 4','B 3','B 8','B 4','B 3','B 2','B 1','B 4','B 7','B 4','B 3','B 1','B 2','B 8','B 11','B 4','B 2','B 7','B 4','B 7','B 3','B 6','B 4','B 9','B 6','B 3','B 4','B 2','B 4','B 2','B 3','B 6','B 4','B 4','B 7','B 4','B 2','B 8','B 1','B 3','B 6','B 2','B 4','B 5','B 1','B 4','B 7','B 4','B 2','B 1','B 4','B 2','B 8','B 9','B 4','B 2','B 3','B 1','B 4','B 12','B 1']})

我需要的输出格式是:

(前两行仅是条件。需要第 3 行的输出)

在此处输入图像描述

标签: pandasif-statementgroup-bywhere-clausecountif

解决方案


利用:

m1 = df['var_1'].eq(df['var_2'])

s1 = df.loc[~m1, 'var_1'].value_counts()
s2 = df.loc[~m1, 'var_2'].value_counts()
s3 = df.loc[m1, 'var_1'].value_counts()

df1 = (pd.concat([s1, s2, s3], axis=1, keys=['c1','c2','c3'])
         .fillna(0)
         .astype(int)
         .rename_axis('Brands'))
df1['c4'] = df1.sum(axis=1)
print (df1)
        c1  c2  c3  c4
Brands                
B 1      3   0  12  15
B 6      0   3   3   6
B 4      0   0  28  28
B 2      0   0  15  15
B 3      0   0  13  13
B 7      0   0  10  10
B 9      0   0   6   6
B 8      0   0   5   5
B 5      0   0   2   2
B 11     0   0   1   1
B 12     0   0   1   1
B 10     0   0   1   1

编辑:

m1 = df['var_1'].eq(df['var_2'])

s1 = df.loc[~m1, 'var_1'].value_counts()
s2 = df.loc[~m1, 'var_2'].value_counts()
s3 = df.loc[m1, 'var_1'].value_counts()
s4 = df['var_1'].append(df['var_2']).value_counts()

df1 = pd.concat([s1, s2, s3, s4], 
                axis=1, 
                keys=['c1','c2','c3','c4']).fillna(0).astype(int).rename_axis('Brands')
print (df1)
        c1  c2  c3  c4
Brands                
B 1      3   0  12  27
B 6      0   3   3   9
B 4      0   0  28  56
B 2      0   0  15  30
B 3      0   0  13  26
B 7      0   0  10  20
B 9      0   0   6  12
B 8      0   0   5  10
B 5      0   0   2   4
B 11     0   0   1   2
B 12     0   0   1   2
B 10     0   0   1   2

推荐阅读