gpt4 book ai didi

python - 具有阈值的累积销售数据形成具有 bool 值的新系列/列?

转载 作者:行者123 更新时间:2023-12-03 16:46:28 25 4
gpt4 key购买 nike

我有这种类型的数据,但在现实生活中它有数百万个条目。产品 ID 始终是特定于产品的,但在其生命周期中会出现多次。


日期
产品编号
收入
估计终生值(value)


2021-04-16
0061M00001AXc5lQAD
970
2000年

2021-04-17
0061M00001AXbCiQAL
159
50000

2021-04-18
0061M00001AXb9AQAT
80
3000

2021-04-19
0061M00001AXbIHQA1
1100
8000

2021-04-20
0061M00001AXbY8QAL
90
4000

2021-04-21
0061M00001AXbQ1QAL
29
30000

2021-04-21
0061M00001AXc5lQAD
30
2000年

2021-05-02
0061M00001AXc5lQAD
50
2000年

2021-05-05
0061M00001AXc5lQAD
50
2000年


我希望在 Pandas 中创建一个新列,指示某个产品 ID 何时产生的收入超过特定阈值,例如100$, 1000$,将其标记为胜利 (1)。在产品的生命周期中,胜利可能只发生一次。此外,我想创建另一列来指示特定产品销售额超过的行,例如估计生命周期值(value)的 10%。
在 Python/Pandas 中实现这一目标的最直观方法是什么?
编辑:

  • dw1k_thresh:如果特定产品 id 的累计销售额 >= 1000,则该列采用 bool 值 1,否则为零。但是 1 只能出现一次,之后再次始终为零。基本上它只是一个产品销量超过1000临界值时的日期和交易指标。
  • dw10perc:如果一个产品 id 的累计销售额 >= 估计生命周期值(value)的 10%,则该列取值为 1,否则为 0。但是 1 只能出现一次,之后再次始终为零。基本上它只是一个日期和交易的指标,当产品销售额超过估计生命周期值(value)的 10% 的临界值时。
  • 阈值对于所有产品 ID 都是通用的(我将在稍后阶段使用不同的阈值复制该过程,以确定哪个是预测 future 收入的最佳阈值)。

  • 我正在努力实现这一目标:
    enter image description here
    到目前为止,我编写的代码试图建立 cum_rev 和 dw1k_thresh 列,但不幸的是它不起作用。
    df_final["dw1k_thresh"] = 0
    df_final["cum_rev"]= 0

    opp_list =set()

    for row in df_final["product id"].iteritems():
    opp_list.add(row)


    opp_list=list(opp_list)
    opp_list=pd.Series(opp_list)


    for i in opp_list:
    if i == df_final["product id"].any():
    df_final.cum_rev = df_final.revenue.cumsum()

    for x in df_final.cum_rev:
    if x >= 1000 & df_final.dw1k_thresh.sum() == 0:
    df_final.dw1k_thresh = 1
    else:
    df_final.dw1k_thresh = 0

    df_final.head(30)

    最佳答案

  • 累计收入 : 可以很简单地用 groupby 计算和 cumsum .
  • dwk1k_thresh :我们首先检查 cum_rev 是否​​大于 1000,然后应用帮助我们保持 1 的函数只有一次 ,之后再次始终为零。
  • dw10_perc : 与 dw1k_thresh 相同的方法。

  • 作为第一步,您需要删除 $并确保您的列是数字类型以执行您概述的比较。
    # Imports
    import pandas as pd
    import numpy as np

    # Remove $ sign and convert to numeric
    cols = ['revenue','estimated lifetime value']
    df[cols] = df[cols].replace({'\$': '', ',': ''}, regex=True).astype(float)

    # Cumulative Revenue
    df['cum_rev'] = df.groupby('product id')['revenue'].cumsum()

    # Function to be applied on both
    def f(df,thresh_col):
    return (df[df[thresh_col]==1].sort_values(['date','product id'], ascending=False)
    .groupby('product id', as_index=False,group_keys=False)
    .apply(lambda x: x.tail(1))
    ).index.tolist()

    # dw1k_thresh
    df['dw1k_thresh'] = np.where(df['cum_rev'].ge(1000),1,0)
    df['dw1k_thresh'] = np.where(df.index.isin(f(df,'dw1k_thresh')),1,0)

    # dw10perc
    df['dw10_perc'] = np.where(df['cum_rev'] > 0.10 * df.groupby('product id',observed=True)['estimated lifetime value'].transform('sum'),1,0)
    df['dw10_perc'] = np.where(df.index.isin(f(df,'dw10_perc')),1,0)
    打印:
    >>> df

    date product id revenue ... cum_rev dw1k_thresh dw10_perc
    0 2021-04-16 0061M00001AXc5lQAD 970 ... 970 0 1
    1 2021-04-17 0061M00001AXbCiQAL 159 ... 159 0 0
    2 2021-04-18 0061M00001AXb9AQAT 80 ... 80 0 0
    3 2021-04-19 0061M00001AXbIHQA1 1100 ... 1100 1 1
    4 2021-04-20 0061M00001AXbY8QAL 90 ... 90 0 0
    5 2021-04-21 0061M00001AXbQ1QAL 29 ... 29 0 0
    6 2021-04-21 0061M00001AXc5lQAD 30 ... 1000 1 0
    7 2021-05-02 0061M00001AXc5lQAD 50 ... 1050 0 0
    8 2021-05-05 0061M00001AXc5lQAD 50 ... 1100 0 0

    关于python - 具有阈值的累积销售数据形成具有 bool 值的新系列/列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67159328/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com