从两行之间的 pandas 数据框中提取行
Extract rows from a pandas dataframe between two rows
这是我拥有的数据样本。
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
数据帧 2 将具有
A| 1.42 | 1 | 1| 0 | 0
A| 1.42 | 1 | 3| 0 | 0
A| 1.42 | 1 | 4| 0 | 0
谢谢!
拆分成单独数据帧的一种非常自然的方法是使用 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]
这是我拥有的数据样本。
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
数据帧 2 将具有
A| 1.42 | 1 | 1| 0 | 0
A| 1.42 | 1 | 3| 0 | 0
A| 1.42 | 1 | 4| 0 | 0
谢谢!
拆分成单独数据帧的一种非常自然的方法是使用 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]