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

时间:2017-06-08 21:03:39

标签: python pandas group-by 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

是否可以使用' A'提取行。在两行之间的第一列中有' T'在第一列并放入一个新的数据框?

例如在这种情况下 数据帧1会有

A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   2|   0 |   0

和dataframe 2会有

A| 1.42 |     1 |   1|   0 |   0
A| 1.42 |     1 |   3|   0 |   0
A| 1.42 |     1 |   4|   0 |   0
谢谢你!

1 个答案:

答案 0 :(得分:6)

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

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

我们可以看到这些组并通过迭代来打印它们。

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

您可以使用

获取这些列表
list_of_groups = [g for n, g in grps]