【发布时间】:2021-06-17 12:05:03
【问题描述】:
我想根据 start 和 stop 列对 pandas Dataframe 进行剪切/分组,但仅限于 start->stop 的情况。
我想要从“开始”非零值到“停止”非零值的索引范围。但仅当“开始”非零值后跟“停止”非零值时。从上到下遍历索引
我附上了一些代码,创建了问题的简化版本和相应的图像。
col1 = np.zeros(10)
col2 = np.zeros(10)
col1[[0, 1, 5, 8]] = 1
col2[[3, 6, 7, 9]] = 1
df = pd.DataFrame({'start': col1, 'stop': col2})
所需的输出将索引分组,有点像: [(1,2,3), (5,6), (8,9)]
附加信息以防万一这会简化事情:
- 合并列就可以了。
- 我的原始数据框有一个 pd.TimedeltaIndex。
【问题讨论】:
-
那么,你需要 delta btw 列,对吧?为什么不从另一列中减去一列并将其存储为新列? - 然后你可以过滤掉
!=0的值 -
我不需要行之间的(时间)增量,但特定行的范围 - 要么用会话号 0、1、2、3 等标记它们,要么直接将它们分组以进行 groupby 的计算(grouper/cut 等)。
-
对不起,没看懂要求,它的范围是从第一个
start非零值到第一个stop非零值,不是吗? -
对不起,造成混乱。我想要从“开始”非零值到“停止”非零值的索引范围。但仅当“开始”非零值后跟“停止”非零值时。从上到下遍历索引。
-
我添加了对我想要实现的目标的视觉说明。我希望这会有所帮助。