gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:52 25 4
gpt4 key购买 nike

我有一个看起来与此类似的数据框(除了 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 关联>访问_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

最佳答案

这假设您所有的列都是 datetime。如果不是,请转换它们。


设置

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/

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