首页 > 解决方案 > 有没有办法根据多次出现的标志条件提取熊猫数据框中的块

问题描述

我有一个熊猫数据框,如下所示

df = pd.DataFrame({"flag":[0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0],
                  "Val":[1, 5, 7, 5, 4, 7, 8, 11, 13, 44, 7 , 8, 10, 14, 12]})

输出:

在此处输入图像描述

输出:

我正在寻找一种基于 flag = 1 多次出现的条件来提取数据帧块的方法

Chunk 1
Val flag
7    1
5    1
4    1
7    1

Chunk 2
Val flag
44   1
7    1
8    1
10   1

等等任何帮助将不胜感激

标签: pythonpandas

解决方案


Series通过比较Series.nefor not equal withSeries.shift和累积总和 by Series.cumsumfor helper 组创建,然后Series.map通过Series.value_counts过滤器对它们计数 2 行或更多行Series.gt,仅过滤1值和下巴两个条件,& 按位AND并传递到boolean indexing,最后循环按组:

g = df['flag'].ne(df['flag'].shift()).cumsum()

m1 = g.map(g.value_counts()).gt(1)
m2 = df['flag'].eq(1)

for k, gr in df[m1 & m2].groupby(g):
    print (gr)

   flag  Val
2     1    7
3     1    5
4     1    4
5     1    7
    flag  Val
9      1   44
10     1    7
11     1    8
12     1   10

推荐阅读