根据特定条件计算多于一列的新近度-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中的具体条件计算Avg

根据上一行中具有特定条件的列之一的值创建新行 - pandas 或 numpy

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

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

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

如何根据pandas中的多个条件生成一列?

根据pandas中的特定条件删除特定行

Pandas 数据框 - 将前一列中与特定条件匹配的所有值相加并将其添加到新列中

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

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

使用groupby对pandas中的特定条件计算列中的值数

Pandas- 根据特定条件添加新行

pandas groupby:在特定条件下计算记录数

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

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

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

根据 Pandas 中第二列的条件,用另一行的同一列的值填充特定行的列中的值

根据另一列中的前几行数据计算pandas中的列值

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

pandas 根据另一列中的条件从 1 列中提取公共子串

Pandas 根据另一列的条件有选择地覆盖列中的值

根据另一列计算行之间的差异_Pandas

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

如果在另一列上满足条件,则 Pandas 函数可对一列执行计算

根据来自其他列 pandas python 的特定值创建一列

Pandas 数据框根据另一列的条件创建新行

根据另一列中的条件从 Pandas 数据框中提取值