【问题标题】:Find sale of other categories when a user has bought in some category?当用户购买了某个类别时,寻找其他类别的销售?
【发布时间】:2019-08-21 03:25:48
【问题描述】:

我有以下格式的数据。这是不同类别的 user_id 级别的销售日期。

id  cat_1   cat_2   cat_3
1     1      10      100
2     2      0        0
3     0      20       0
5     3      0        0
6     4      0        0
9     5      0        0
10    0     30       200
11    6     0        300
12    7     0         0
13    8     40      400

我想要用户购买某个类别时其他类别的销售额等数据。例如。当cat_1不等于0时,cat_2和cat_3的销售额是多少。

      cat_1  cat_2  cat_3
cat_1   36   50     800
cat_2   9   100     700
cat_3   15  80      1000

可以在excel中完成,但是通过pandas寻找方法。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    将字典理解与boolean indexingSeries.eq (>) 过滤的行的总和一起使用,通过concat 连接在一起并通过Series.unstack 重塑:

    #if id is not index
    df = df.set_index('id')
    df = pd.concat({x:df[df[x].gt(0)].sum() for x in df.columns}).unstack()
    #alternative
    #df = pd.concat({x:df[df[x].gt(0)].sum() for x in df.columns}, axis=1).T
    
    print (df)
           cat_1  cat_2  cat_3
    cat_1     36     50    800
    cat_2      9    100    700
    cat_3     15     80   1000
    

    【讨论】:

    • @NitinKansal - 当然,检查我的个人资料,为我的 eamil 运行代码并将 csv 发送给我。
    【解决方案2】:
    arr = np.empty([df.shape[1], df.shape[1]])
    for indexi,i in enumerate(df):
        for indexj,j in enumerate(df):
            arr[indexi][indexj] = sum(df[df[i]>0][j])
    

    【讨论】:

    • 所以我改变了我的解决方案。还是您的解决方案有效而我没有?我很困惑。
    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多