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)
谢谢 !
分裂成单独数据帧的一种非常自然的方法是使用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)