python - 创建一个新列,该新列是满足两个条件的多个其他列中的日期数之和

标签 python pandas datetime

我有一个与此类似的数据框(除了 VisitDeliv 列的数量增加到 Visit_84 Deliv 84 并且有数百个客户端 - 我在这里简化了它)

Client   Visit_1    Visit_2    Visit_3    Deliv_1  Deliv_2  Deliv_3 Key_DT
Client_1 2018-01-01 2018-01-20 2018-02-10 No       Yes      Yes     2018-01-15
Client_2 2018-01-10 2018-01-30 2018-02-10 Yes      Yes      No      2018-01-25
Client_3 2018-01-20 2018-04-01 2018-04-10 Yes      Yes      Yes     2018-04-15
Client_4 2018-01-30 2018-03-01 2018-03-10 Yes      No       Yes     2018-02-25

我想创建一个名为 Vis_sum 的新列,用于显示从 Visit_1Visit_3 之后的访问次数总和Key_DT 位于同一行,并且在关联的 Deliv 列中具有 Yes(例如 Deliv_1 >Visit_1)。它应该看起来像这样

Client   Visit_1    Visit_2    Visit_3    Deliv_1  Deliv_2  Deliv_3 Key_DT     Vis_sum
Client_1 2018-01-01 2018-01-20 2018-02-10 No       Yes      Yes     2018-01-15 2
Client_2 2018-01-10 2018-01-30 2018-02-10 Yes      Yes      No      2018-01-25 1
Client_3 2018-01-20 2018-04-01 2018-04-10 Yes      Yes      Yes     2018-04-15 0
Client_4 2018-01-30 2018-03-01 2018-03-10 Yes      No       Yes     2018-02-25 1

最佳答案

这假设您的所有列都是日期时间。如果不是,请将它们转换。


设置

a = df.filter(like='Visit').values
b = df.filter(like='Deliv').eq('Yes').values
c = df['Key_DT'].values

与广播进行比较

((a > c[:, None]) & b).sum(1)

array([2, 1, 0, 1])

df.assign(Vis_sum=((a > c[:, None]) & b).sum(1))

     Client    Visit_1    Visit_2    Visit_3 Deliv_1 Deliv_2 Deliv_3     Key_DT  Vis_sum
0  Client_1 2018-01-01 2018-01-20 2018-02-10      No     Yes     Yes 2018-01-15        2
1  Client_2 2018-01-10 2018-01-30 2018-02-10     Yes     Yes      No 2018-01-25        1
2  Client_3 2018-01-20 2018-04-01 2018-04-10     Yes     Yes     Yes 2018-04-15        0
3  Client_4 2018-01-30 2018-03-01 2018-03-10     Yes      No     Yes 2018-02-25        1

关于python - 创建一个新列,该新列是满足两个条件的多个其他列中的日期数之和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55750372/

相关文章:

python - 用 moviepy 制作 mayavi 动画

python - 如何将数据框写入Excel并更改格式

Python/Mechanize - 无法选择表单 - ParseError(exc)

python - 在 Pandas 列上使用字典吗?

python - 使用值列表从 Pandas 数据框中选择行

mysql - 为 DATE 或 DATETIME 设置默认值时 MySQL 出错

php 日期重新格式化

mysql 结果来自 table1,其中 table2 不匹配并且在 start_datetime 和 start_datetime + 8 小时之间

python - 通过 IMAP 添加自定义 RFC822 header ?

python - Pandas + sklearn 线性回归失败