从两行之间的pandas数据帧中提取行

Rav*_*ile 2 python group-by pandas pandas-groupby

这是我拥有的数据样本.

T| 1.42 | Test1 |   1|   0 |   0
A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   2|   0 |   0
T| 1.42 | Test1 |   1|   0 |   0
A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   3|   0 |   0
A| 1.42 |     1 |   4|   0 |   0
T| 1.42 | Test1 |   1|   0 |   0
Run Code Online (Sandbox Code Playgroud)

是否可以在第一列中的第一列中提取带有'A'的行,并在第一列中使用'T'并将其放入新的数据帧中?

例如,在这种情况下,数据帧1将具有

A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   2|   0 |   0
Run Code Online (Sandbox Code Playgroud)

和dataframe 2会有

A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   3|   0 |   0
A| 1.42 |     1 |   4|   0 |   0
Run Code Online (Sandbox Code Playgroud)

谢谢 !

piR*_*red 6

分裂成单独数据帧的一种非常自然的方法是使用groupby.我找到第一列的位置,'T'并使用布尔索引并cumsum识别组.

m = df.iloc[:, 0].eq('T')
cumgrp = m.cumsum()[~m]
grps = df[~m].groupby(cumgrp)
Run Code Online (Sandbox Code Playgroud)

我们可以通过遍历它们来查看组并打印它们.

for n, g in grps:
    print(n)
    print()
    print(g)
    print()

1

   0     1  2  3  4  5
1  A  1.42  1  1  0  0
2  A  1.42  1  2  0  0

2

   0     1  2  3  4  5
4  A  1.42  1  1  0  0
5  A  1.42  1  3  0  0
6  A  1.42  1  4  0  0
Run Code Online (Sandbox Code Playgroud)

您可以获得这些列表

list_of_groups = [g for n, g in grps]
Run Code Online (Sandbox Code Playgroud)