计算玩具销售额大于该列平均值的次数

Count Number of Times the Sale of a Toy is greater than Average for that Column

我有一个数据集,我必须在其中确定玩具的销售价值是否大于列中的平均值,并计算有多少个不同的销售区域,价值大于平均值。

例如:找到列 "Sale B" - 2.5 的平均值,检查该值大于 2.5 的行数,然后对 "SaleA""SaleC" 执行相同的练习然后全部添加

input_data = pd.DataFrame({'Toy': ['A','B','C','D'],
                      'Color': ['Red','Green','Orange','Blue'],
                      'SaleA': [1,2,0,1],
                      'SaleB': [1,3,4,2],
                      'SaleC': [5,2,3,5]})

创建了新列 "Count_Sale_Average",例如:玩具“A”只有一个位置的销量高于平均水平。

output_data = pd.DataFrame({'Toy': ['A','B','C','D'],
                      'Color': ['Red','Green','Orange','Blue'],
                      'SaleA': [1,2,0,1],
                      'SaleB': [1,3,4,2],
                      'SaleC': [5,2,3,5],
                       'Count_Sale_Average':[1,2,1,1]})

我的代码正在运行并提供了所需的输出。关于其他方法的任何建议可能会更有效并且行数更少。

list_var = ['SaleA','SaleB','SaleC']
df = input_data[list_var]

for i in range(0,len(list_var)):
    var = list_var[i]
    mean_var = df[var].mean()
    df[var] = df[var].apply(lambda x: 1 if x > mean_var else 0)
    
df['Count_Sale_Average'] = df[list_var].sum(axis=1)
output_data = pd.concat([input_data, df[['Count_Sale_Average']]], axis=1)
output_data

您可以 filter,在轴上找到 meansum

filtered = input_data.filter(like='Sale')
input_data['Count_Sale_Average'] = filtered.gt(filtered.mean()).sum(axis=1)

输出:

  Toy   Color  SaleA  SaleB  SaleC  Count_Sale_Average
0   A     Red      1      1      5                   1
1   B   Green      2      3      2                   2
2   C  Orange      0      4      3                   1
3   D    Blue      1      2      5                   1