根据常见的连续序列拆分数据帧

Split dataframe according to common consecutive sequences

提问人:floupinette 提问时间:12/31/2022 更新时间:12/31/2022 访问量:86

问:

让我们考虑一下这个 DataFrame:

import pandas as pd

df = pd.DataFrame({"type" : ["dog", "cat", "whale", "cat", "cat", "lion", "dog"],
                   "status" : [False, True, True, False, False, True, True],
                   "age" : [4, 6, 7, 7, 1, 7, 5]})

它看起来像这样:

    type  status  age
0    dog   False    4
1    cat    True    6
2  whale    True    7
3    cat   False    7
4    cat   False    1
5   lion    True    7
6    dog    True    5

我想根据列状态中的连续相同值拆分此数据帧。 结果存储在列表中。

这里我手动写下预期的结果:

result = [df.loc[[0],:], df.loc[1:2,:], df.loc[3:4,:], df.loc[5:6,:]]

所以 result[0] 是这个数据帧:

  type  status  age
0  dog   False    4

result[1] 是这个 DataFrame:

    type  status  age
1    cat    True    6
2  whale    True    7

result[2] 是这个 DataFrame:

  type  status  age
3  cat   False    7
4  cat   False    1

result[3] 是 DataFrame:

   type  status  age
5  lion    True    7
6   dog    True    5

最有效的方法是什么?

Python Pandas 数据帧 拆分 序列

评论


答:

2赞 BENY 12/31/2022 #1

让我们一起做

s = df.status.ne(df.status.shift())
result = [ y for _ , y in df.groupby(s.cumsum())]
#result[0]
#Out[69]: 
#  type  status  age
#0  dog   False    4