【问题标题】:COUNTIFS in Python PandasPython Pandas 中的 COUNTIFS
【发布时间】:2020-10-13 07:03:24
【问题描述】:

我正在尝试使用以下数据框在 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']})

  • 假设我有两个变量,包含 100 个不同品牌的响应
  • 我有 var 1 和 var 2 的不重复列表
  • 我正在创建以下新列,
  • 第 1 列 - 该品牌在多少行中有 var 1 但不在 var 2 中
  • 第 2 列 - 该品牌在多少行中有 var 2 但不在 var 1 中
  • 第 3 列 - 该品牌在多少行中有 var 1 AND ALSO var 2
  • 第 4 列 - 总行数 - 第 1 列 + 第 2 列 + 第 3 列

我需要的输出格式是:

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

【问题讨论】:

  • 到目前为止您遇到了什么问题?你的尝试在哪里
  • 我用以下代码尝试了第 3 列 ```` df_test_1 = df[(df['var_1'] == df['var_2'])].groupby(['var_1']) .size().reset_index(name='column_3')````.
  • 将其添加到您的问题中,我将删除我的反对票

标签: pandas if-statement group-by where-clause countif


【解决方案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()

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

【讨论】:

  • C1、C2 和 C3 是完美的。 C4 = 所有行数 - (C1+C2+C3)。这就是区别。那个专栏,我可以管理。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多