根据 pandas 中的给定条件派生特征或列

2024-03-28

我有 df 如下所示

ID     Age_days    N_30     N_31_90     N_91_180      N_180_365
1      201         60       15          30            1
2      800         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
9      500         0        0           0             0

从上面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 
  if df['age_days'] <= 365, Recency = df['age_days']
  else Recency = 366

预期输出:

ID     Limit    N_30     N_31_90     N_91_180      N_180_365    Recency
1      201      60       15          30            1            (30/60) = 0.5
2      800      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            200
9      500      0        0           0             0            366

我尝试了下面的代码

pd.set_option("use_inf_as_na", True)
df2 = df[['N_30', 'N_31_90', 'N_91_180', 'N_180_365']]
df["Recency"] = (df2.eq(0) * [30, 60, 90, 180]).sum(1) + ([30, 60, 90, 185] / df2).bfill(1).iloc[:, 0]
df["Recency"].fillna(366)

Use numpy.select https://numpy.org/doc/stable/reference/generated/numpy.select.html

import numpy as np

conditions = [df['N_30'] != 0, df['N_31_90'] != 0, df['N_91_180'] != 0, df['N_180_365'] != 0, df['Age_days'] <= 365]

choices = [(30/df['N_30']), 30 + (60/df['N_31_90']), 90 + (90/df['N_91_180']), 180 + (185/df['N_180_365']), df['Age_days']]

df['Recency']=np.select(conditions, choices, default=366)

Output:

   ID  Age_days  N_30  N_31_90  N_91_180  N_180_365  Recency
0   1       201    60       15        30          1      0.5
1   2       800     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
7   8       200     0        0         0          0    200.0
8   9       500     0        0         0          0    366.0

我假设很少有修正,我正在使用N_180_365代替N_181_365您有条件但没有 DF。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 pandas 中的给定条件派生特征或列 的相关文章

随机推荐

  • Xcode 卡在索引上

    我已经工作了两个月的项目无缘无故停止工作 因为 Xcode 卡在 索引 上 我无法再构建该项目了 如果我尝试构建 Xcode 就会冻结 我必须强制退出 这种情况仅发生在该项目中 我尝试清理所有派生数据 但没有帮助 我正在使用 Xcode 4
  • jqgrid 更改单元格值并保持编辑模式

    我在网格中使用内联编辑 在某些情况下我想更改列内单元格的值 我用 setCell 更改它 效果很好 我的问题是 更改后 单元格失去了编辑模式 而该行的所有其他单元格都处于编辑模式 我想在更改单元格后将其保持在编辑模式 现在我所做的是保存该行
  • 种子中的 DHT

    我正在编写一个 P2P 实现 我希望将其去中心化 然而我在掌握如何做时遇到了一些困难DHT https en wikipedia org wiki Distributed hash table在像 BitTorrent 这样的协议中是有效的
  • 帮助正确计算atan2

    我需要计算线之间的角度 我需要计算atan 所以我正在使用这样的代码 static inline CGFloat angleBetweenLinesInRadians2 CGPoint line1Start CGPoint line1End
  • python中“追加”和“+”有什么区别? [复制]

    这个问题在这里已经有答案了 我不知道有什么区别f and g 功能中f 每当调用函数时 列表 L 就会累积 但在功能上g 它不是 def f a L L append 2 print L def g a L L L 2 print L pr
  • SQL Server 2008中的递归同表查询

    我在 SQL Server 2008 数据库中有下表 Id Name ParentFolder 1 Europe NULL 2 Asia NULL 3 Germany 1 4 UK 1 5 China 2 6 India 2 7 Scotl
  • echo 函数跳转到 Div 之外

    我创建了一个用于 gettext 翻译的函数 该函数位于头文件中 function ex text echo gettext text 当我使用函数 ex 时它会翻译该函数中的任何文本 效果很好 尽管当我在另一个内部有 div 的函数中使用
  • 使用 Apache Lucene 对 MySQL 数据库建立索引,并保持它们同步

    当MySQL中添加一个新项目时 它也必须被Lucene索引 当现有项目从 MySQL 中删除时 它也必须从 Lucene 的索引中删除 这个想法是编写一个脚本 通过调度程序 例如 CRON 任务 每 x 分钟调用一次 这是保持 MySQL
  • 简单的 Perl websocket 客户端

    我正在尝试用 Perl 编写一个简单的 websocket 客户端 use Protocol WebSocket Client my client Protocol WebSocket gt new url gt ws myserver p
  • 使用多核的 Numpy np.einsum 数组乘法

    我用MKL编译了numpy 1 6 2和scipy 希望有更好的性能 目前我有一个严重依赖 np einsum 的代码 并且我被告知 einsum 不适用于 MKL 因为几乎没有矢量化 所以我想用 np dot 和切片重新编写一些代码 只是
  • 预训练 Transformer 模型的配置更改

    我正在尝试为重整变压器实现一个分类头 分类头工作正常 但是当我尝试更改配置参数之一 config axis pos shape 即模型的序列长度参数时 它会抛出错误 Reformer embeddings position embeddin
  • IL 使用 Reflection.Emit 调用带有 params object[] 参数的方法

    我正在编写一个需要稍后类型构建的库 库使用平台 Net core 2 0 我使用 Reflection Emit 生成的某些类型存在问题 public class GeneratedA A IA public void DoInterfac
  • 为什么 git rebase 在我未修改的文件中显示冲突?

    假设我在本地仓库 其分支是my name branch A 当我做git rebase
  • XML::LibXML 文本节点父节点的概念

    这里似乎有些奇怪 在下面的示例中 我通过 XPath 查询访问文本节点 book isbn text The text 需要强制XML LibXML允许我使用XML LibXML Text方法 不过 要到达父节点 我必须调用parentNo
  • NSLocationWhenInUseUsageDescription 的 Xamarin.iOS 本地化

    有没有办法本地化NSLocationWhenInUseUsageDescription in Info plist在 Xamarin 工作室中 或者是否有可能将完整的内容本地化Info plist也将是一个解决方案 我尝试了以下步骤 因为它
  • 如何在 for 循环中制作按钮,并为每个按钮添加 lambda 表达式? [复制]

    这个问题在这里已经有答案了 我正在尝试用 javafx 制作一个刽子手游戏 因此 很自然地 我尝试使用 for 循环来创建每个按钮 而不是创建 26 个单独的按钮 我将它们放入名为 Alphabet 的 ArrayList 中 并将它们添加
  • 快速滚动 UIPageViewController 阻止视图控制器更新

    我有一个 UIPageviewcontroller 里面有两个控制器 当您滑动到下一个时 我使用 viewController 参数来设置适当的委托 但我的经验是 如果你滑动得太快 函数 viewControllerAfter 就无法正确更
  • 用于加密的公钥;解密用的私钥?

    我知道私钥和公钥在数学上是相关的 用一个密钥加密的数据只能用另一个密钥解密 我的问题是私钥总是用于加密数据 而公钥总是用于解密数据 或者可以反过来 如果是这样 您能否给出一些在其他方向使用的示例应用程序 用于加密的公钥和用于解密的私钥 加密
  • 连接到 unix:/var/run/php5-fpm.sock 失败。我的设置有什么问题吗?

    我在 DigitalOcean 上有一个 2GB VPS 并且在 Debian 7 下使用 NGINX php fpm 和 unix 套接字托管 WordPress 3 9 1 它一直工作得很好 直到上周它开始显示 502 bad gate
  • 根据 pandas 中的给定条件派生特征或列

    我有 df 如下所示 ID Age days N 30 N 31 90 N 91 180 N 180 365 1 201 60 15 30 1 2 800 0 15 5 10 3 800 0 0 10 6 4 100 0 0 0 370 5