【发布时间】:2021-09-08 20:57:13
【问题描述】:
我正在尝试比较 python groupby 中的行,并根据条件对这些行执行一些操作。
下面是我的数据集
| ID | SUBID | billtype | start_date | end_Date | used_bill_type |
|---|---|---|---|---|---|
| 757911 | 40F8E | Direct | 7/1/2015 | 2/1/2021 | [] |
| 757911 | 40F8E | Modern | 3/1/2021 | 8/1/2021 | ["Direct"] |
| 757911 | D9F83 | EA | 7/1/2015 | 8/1/2021 | [] |
| 757911 | D9F83 | Suites | 4/1/2015 | 7/1/2021 | ["EA"] |
| 757911 | D9F83 | EA RI | 10/1/2019 | 8/1/2021 | ["EA","Suites"] |
| 757911 | 6DFB5 | EA | 12/1/2017 | 4/1/2018 | [] |
| 757911 | 6DFB5 | Direct | 8/1/2018 | 9/1/2020 | ["EA"] |
| 757911 | 6DFB5 | Modern | 9/1/2020 | 8/1/2021 | ["EA","Direct"] |
我想按 ID 和 SUBID 分组。 used_bill_type 列包含以前用于该 ID 和 SUBID 组合的帐单类型。因此,在第一行中,对于 ID -757911 和 SUBID -40F8E,第一次计费为 Direct,因此 used_bill_type 将为空,而在第二行对于相同的 ID -757911 和 SUBID -40F8E,第二个计费类型为 Modern,因此其之前的 used_bill_type 将是 Direct。
所以我想要一个输出,其中在 groupby 内比较行并在 used_bill_type
上执行删除操作可以这么说,对于 ID -757911 和 SUBID -40F8E,Modern 于 2021 年 3 月 1 日添加,但之前添加了帐单类型 Direct 于 2/1/2021 结束,因此应该从该行的 used_bill_type 列表中弹出 Direct
因此,当添加一个计费类型时,如果其先前添加的计费类型在此新计费类型的 start_date 之前结束,则应从 used_bill_type 列表中删除该计费类型。
所以预期的输出应该是这样的:
| ID | SUBID | billtype | start_date | end_Date | used_bill_type |
|---|---|---|---|---|---|
| 757911 | 40F8E | Direct | 7/1/2015 | 2/1/2021 | [] |
| 757911 | 40F8E | Modern | 3/1/2021 | 8/1/2021 | [] |
| 757911 | D9F83 | EA | 7/1/2015 | 8/1/2021 | [] |
| 757911 | D9F83 | Suites | 4/1/2017 | 7/1/2021 | ["EA"] |
| 757911 | D9F83 | EA RI | 10/1/2019 | 8/1/2021 | ["EA","Suites"] |
| 757911 | 6DFB5 | EA | 12/1/2017 | 4/1/2018 | [] |
| 757911 | 6DFB5 | Direct | 8/1/2018 | 9/1/2020 | [] |
| 757911 | 6DFB5 | Modern | 9/1/2020 | 8/1/2021 | ["Direct"] |
下面是创建Dataframe的代码
data = pd.DataFrame({'TPID' : [757911,757911,757911,757911,757911,77909646,77909646,77909646],
'SUBID': ['40F8E','40F8E','D9F83','D9F83','D9F83','6DFB5','6DFB5','6DFB5'],
'start_date': ['7/1/2015','3/1/2021','7/1/2015','4/1/2017','10/1/2019','12/1/2017','8/1/2018','9/1/2020'],
'end_Date': ['2/1/2021','8/1/2021','8/1/2021','7/1/2021','8/1/2021','4/1/2018','9/1/2020','8/1/2021'],
'used_bill_type': [[],["Direct"],[],["EA"],["EA","Suites"],[],["EA"],["EA","Direct"]]
})
【问题讨论】:
-
billtype 有具体的顺序吗?即:
Direct<Modern<EA<Suites<EA RI而且,相同的账单是否与您的示例具有相同的开始和结束日期? -
嘿 Babak,没有任何账单没有任何特定顺序,同样的账单也没有相同的开始或结束日期
-
嘿巴巴克,我的错-我已经更新了表格中的日期。这个问题现在说得通了
标签: python pandas pandas-groupby