gpt4 book ai didi

python - 获取多索引 Pandas 系列级别内序列的第一个和最后一个元素

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

我有一个系列,其状态可以是 True 或 False。它有一个 MultiIndex,第一级用于 ID,第二级用于每个 ID 中的剧集,第三级用于记录状态的日期。

ID  Episode Date        Status
foo 1 2019-02-01 False
2019-02-02 True
2019-02-03 True
2019-02-04 False
2 2019-02-05 True
2019-02-06 True
2019-02-07 False
3 2019-02-08 False
2019-02-09 True
2019-02-10 True
bar 1 2019-03-03 False
2019-03-04 True
2 2019-03-05 True
2019-03-06 True
2019-03-07 False
2019-03-08 True
2019-03-09 False

我想将一集中 Status 开始为 True 和停止为 True 的日期提取到 Dataframe 中。对于这个例子,结果应该是这样的:

 ID Episode Start Dates             End Dates       
foo 1 2019-02-02 2019-03-03
2 2019-02-05 2019-02-06
3 2019-02-09 2019-02-10
bar 1 2019-03-04 2019-03-04
2 2019-03-05, 2019-03-08 2019-03-06, 2019-03-08

最佳答案

检查使用 groupbycumsum 创建组的内部键,下一步我们根据 df 中的所有 True 值进行过滤,然后我们用新键和firstlast做另一轮groupby加入结果

s=(~df.Status).groupby(level=['ID','Episode']).cumsum().reset_index()

s[df.Status.values].groupby(['ID','Episode','Status'])['Date'].agg(['first','last']).groupby(level=[0,1]).agg(','.join)
Out[104]:
first last
ID Episode
bar 1 2019-03-04 2019-03-04
2 2019-03-05,2019-03-08 2019-03-06,2019-03-08
foo 1 2019-02-02 2019-02-03
2 2019-02-05 2019-02-06
3 2019-02-09 2019-02-10

关于python - 获取多索引 Pandas 系列级别内序列的第一个和最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55367006/

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