假设我有一个具有以下结构的数据帧:
observation
d1 1
d2 1
d3 -1
d4 -1
d5 -1
d6 -1
d7 1
d8 1
d9 1
d10 1
d11 -1
d12 -1
d13 -1
d14 -1
d15 -1
d16 1
d17 1
d18 1
d19 1
d20 1
其中d1:d20是某个日期时间索引(在此处概括) .
如果我想将d1:d2,d3:d6,d7:d10等分成各自的“块”,我将如何蟒蛇化?
Note:
df1 = df[(df.observation==1)]
df2 = df[(df.observation==-1)]
不是我想要的 .
我可以想到蛮力的方式,这种方式可行,但并不是非常优雅 .
2 回答
这是一个使用真实
date.datetime
对象作为索引的示例 .运行这个:
您可以根据
observation
列的diff()
的cumsum()
创建组变量,如果diff()不等于零,则指定True值,因此每次出现新值时,都会创建一个新的组IDcumsum()
,然后您可以在groupby()
之后使用df.groupby((df.observation.diff() != 0).cumsum())...(other chained analysis here)
应用标准分析,或者使用list-comprehension
将它们拆分为更小的数据框:索引块在这里: