python - 如何创建一个新列,该列是特定范围内满足多个条件的列数的总和
问题描述
.我有一个看起来与此类似的数据框(除了Visit
和Deliv
列的数量上升到Visit_12
并且Deliv 12
有数百个客户端 - 我在这里简化了它)
Client Visit_1 Visit_2 Visit_3 Deliv_1 Deliv_2 Deliv_3 Key_DT
Client_1 2018-01-01 2018-01-20 2018-03-29 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
Client_5 2018-04-02 2018-04-07 2018-04-20 Yes No Yes 2018-04-01
我想创建一个名为的新列Vis_sum
,该列显示,对于所有具有Key_DT
after2018-01-20
但 before的客户2018-03-25
,访问次数的总和Visit_1
(Visit_3
i)Key_DT
在同一行中,(ii)在之前2018-03-25
和(iii)Yes
在关联列中有一个Deliv
(例如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-03-29 No Yes Yes 2018-01-15 0
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
Client_5 2018-04-02 2018-04-07 2018-04-20 Yes No Yes 2018-04-01 0
请注意 - 所有列中都缺少数据,因此必须考虑到这一点。
我尝试了以下方法 - 但没有奏效。虽然 (i) 和 (ii) 部分的代码在一起尝试时工作,而 (iii) 的代码单独工作,但当编写以下所有代码时,它会0
为列中的每一行返回Vis_sum
:
df.loc[((df.Key_DT < '2018-03-25') &
(df.Key_DT >= '2018-01-20')), 'Vis_sum'] = ((df.filter(like='Visit_').gt(df.Key_DT,axis=0)) & (df.filter(like='Visit_').lt(pd.to_datetime('2018-03-25')).fillna(0).astype(bool)) & (df.filter(like='Deliv_').eq('Yes'))).sum(1)
解决方案
您编写的代码不起作用,因为它不知道它应该Visit_#
与Deliv_#
. 试试这个:
df.loc[((df.Key_DT < '2018-03-25') & (df.Key_DT >= '2018-01-20')), 'Vis_sum'] = ((df.filter(like='Visit_').gt(df.Key_DT,axis=0)) & (df.filter(like='Visit_').lt(pd.to_datetime('2018-03-25'),axis=0).fillna(0).astype(bool)) & (df.filter(like='Deliv_').rename(columns=lambda x: x.replace('Deliv','Visit')).eq('Yes'))).sum(1)
推荐阅读
- flutter - 如何在flutter sdk中设置默认图像文件夹
- sql - 我正在尝试在 sqlplus 中构建一个 sql 视图并得到以下错误
- c++ - 为什么在 Windows 上读取文件的速度取决于文件的扩展名?
- java - 将 JSON 响应存储在 List 或 HashMap 中
- typescript - 如何过滤和执行多种类型的数组?
- sql - 普罗米修斯 OR 运算符
- django - 仅将数据从模型表复制到新数据库
- highcharts - 桑基图 highchart 问题
- aframe - 如何将置换贴图应用于 A-Frame 中的平面?
- python - 如何从实际写入的文本中的不和谐转换消息 ID?