У меня есть данные, похожие на следующие:
Код: Выделить всё
import pandas as pd
df = pd.DataFrame(
[
["start", ""],
["data", 10],
["data", 11],
["stop", ""],
["start", ""],
["data", 20],
["data", 21],
["stop", ""],
],
columns=["type", "value"],
)
Код: Выделить всё
type value
0 start
1 data 10
2 data 11
3 stop
4 start
5 data 20
6 data 21
7 stop
Моя цель — перебирать простые списки данных, ограниченные значениями start и stop код>:
Код: Выделить всё
[10, 11]
[20, 21]
Попытка
Я могу сделать это, повторяя:
Код: Выделить всё
def iter_groups(df):
start_idx = None
for idx, row in df.iterrows():
if row["type"] == "start":
assert start_idx is None
start_idx = idx
continue
if row["type"] == "stop":
assert start_idx is not None
yield df.iloc[start_idx : idx+1]
start_idx = None
Упрощение
Я думаю, можно с уверенностью предположить, что между остановками никогда не бывает строк
code> одной группы и начало следующей группы.
Подробнее здесь: https://stackoverflow.com/questions/786 ... -in-pandas