根据特定条件计算多于一列的新近度-Pandas

丹麦文

我有一个df,如下所示

df:

ID     Limit    N_30     N_31_90     N_91_180      N_180_365
1      500      60       15          30            1
2      300      0        15          5             10
3      800      0        0           10            6
4      100      0        0           0             370
5      600      0        6           5             10
6      800      0        0           15            6
7      500      10       10          30            9
8      200      0        0           0             0

关于数据

ID - customer ID
Limit - Limit
N_30 - Number of transaction in last 30 days
N_31_90 - Number of transaction in last 31 to 90 days.
N_91_180 - Number of transaction in last 91 to 180 days.
N_180_365 - Number of transaction in last 281 to 365 days.

从上面的df中,我想提取一个名为的列Recency

说明:

if df['N_30'] != 0, then Recency = (30/df['N_30'])
elif df['N_31_90'] != 0 then Recency = 30 + (60/df['N_31_90'])
elif df['N_91_180'] != 0 then Recency = 90 + (90/df['N_91_180'])
elif df['N_181_365'] != 0 then Recency = 180 + (185/df['N_181_365'])
else Recency = 730

预期产量:

ID     Limit    N_30     N_31_90     N_91_180      N_180_365    Recency
1      500      60       15          30            1            (30/60) = 0.5
2      300      0        15          5             10           30+(60/15) = 34
3      800      0        0           10            6            90+90/10 = 100
4      100      0        0           0             370          180+(185/370) = 180.5           
5      600      0        6           5             10           30+(60/6) = 36
6      800      0        0           15            6            90+(90/15) = 96
7      500      10       10          30            9            30/10 = 3
8      200      0        0           0             0            730


            
克里斯

IIUC,使用布尔掩码与bfill

pd.set_option("use_inf_as_na", True)
df2 = df.filter(like="N_")
df["Recency"] = (df2.eq(0) * [30, 60, 90, 180]).sum(1) + ([30, 60, 90, 185] / df2).bfill(1).iloc[:, 0]
print(df)

输出:

   ID  Limit  N_30  N_31_90  N_91_180  N_180_365  Recency
0   1    500    60       15        30          1      0.5
1   2    300     0       15         5         10     34.0
2   3    800     0        0        10          6     99.0
3   4    100     0        0         0        370    180.5
4   5    600     0        6         5         10     40.0
5   6    800     0        0        15          6     96.0
6   7    500    10       10        30          9      3.0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据Pandas中的特定条件将值从一列复制到同一行中的其他列

根据对列中每个不同值具有特定条件的行,在Pandas Dataframe中计算perc

如何根据特定条件替换Pandas Dataframe中特定列的特定值?

在Pandas数据框中更快地根据特定条件计算滚动事件

Python Pandas:根据另一列更改条件

根据多个列上的多个特定条件在熊猫中创建新列-Pandas

使用基于for循环的pandas中的多个特定条件来计算多个列

根据另一列的条件更新Pandas DataFrame中的一列

如何根据Pandas中另一列的条件比较同一列中的日期?

计算Pandas数据框中符合特定条件的行数

如何根据来自另一列的滚动函数的结果计算pandas DataFrame列的值

pandas DataFrame:根据另一列中的布尔值计算总和

在条件的情况下计算一列中的值之间的间隔,说我只需要计算特定值,然后使用python pandas将它们按另一列分组

我要在Pandas DataFrame的每一列中计算特定数字吗?

如何根据特定条件从Pandas数据框中随机选择行?

如何根据特定条件用列表值替换Pandas Dataframe中的元素?

根据另一列在pandas列中分配值

如何创建在特定条件下计算另一列的列?[R

在pandas数据框中添加一列,该列是根据其他列的条件得出的另一列的平均值

Pandas按两列分组,并根据其中一列的值(分类)将数据写入特定列

Pandas-仅在根据特定条件检索的行上使用正则表达式提取带有数字/字符串的更新列

如何根据特定条件在数据框熊猫中的列上添加一列

如何根据特定条件在一列上进行汇总来重塑数据集?

如何将满足特定条件的列的标题返回给pandas中的新列

Pandas数据框-根据多个条件计算创建多个列

对于sql中的特定条件,同一列中的数据总和如何计算?

如何计算满足R中特定条件的每一列的行数

如何使用C#在同一列中计算相同元素或特定条件?

Python Pandas:根据另一列的值更新行