【发布时间】:2021-10-13 02:16:17
【问题描述】:
我有一个如下所示的熊猫数据框:
CID RefID Date Group MID
100 1 1/01/2021 A
100 2 3/01/2021 A
100 3 4/01/2021 A 101
100 4 15/01/2021 A
100 5 18/01/2021 A
200 6 3/03/2021 B
200 7 4/04/2021 B
200 8 9/04/2021 B 102
200 9 25/04/2021 B
300 10 26/04/2021 C
300 11 27/05/2021 C
300 12 28/05/2021 C 103
我要创建三列:
days_diff:
-
这必须以一种方式创建,如果第一个日期和相应行的 b/w 差异大于属于同一 CID 的 30,则将“NAT”或 0 分配给下一行(重置),然后减去此行对应以下值的日期
-
如果 MIDis 不为 null 并且属于同一 CID 组,则将 'NAT' 或 0 分配给下一行(重置) 然后用这一行减去以下值的日期
否则,只需获取对应行属于同一 CID 的第一行的日期差异
答: 这取决于 days_diff 列,该列就像一个计数器,它只会在同一个 CID 发生另一个 NAT 并为每个 CID 重置时才会更改/递增。
B:此列依赖于 A 列,如果 A 中的值保持不变,则不会改变,否则会递增
解释有点复杂,请参考下面的输出。我已经使用 .groupby() .diff() 和 .shift() 方法来创建多个虚拟列来计算这个并且仍在处理它,请让我知道最好的方法,谢谢
我的预期输出:
CID RefID Date Group MID days_diff A B
100 1 1/01/2021 A NAT 1 1
100 2 3/01/2021 A 2 days 1 1
100 3 4/01/2021 A 101 3 days 1 1
100 4 15/01/2021 A NAT 2 4
100 5 18/01/2021 A 3 days 2 4
200 6 3/03/2021 B NAT 1 6
200 7 4/04/2021 B NAT 2 7
200 8 9/04/2021 B 102 5 days 2 7
200 9 25/04/2021 B NAT 3 9
300 10 26/04/2021 C NAT 1 10
300 11 27/05/2021 C NAT 2 11
300 12 28/05/2021 C 103 1 day 2 11
【问题讨论】: