我想从数据框中提取行的子集,然后在Y列(按X列分组)中出现值。
例如,在这种情况下,对于X中的每个唯一值,我想提取Y中出现“ 1”之前的所有行,并且输出应包括遇到第一个“ 1”的行。
$?
我想要的输出是:
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
3 A 0 83
4 A 1 88
5 B 0 52
6 B 1 66
7 B 1 70
8 C 0 68
9 C 0 72
10 D 1 65
谢谢。
答案 0 :(得分:3)
您可以将groupby
和apply
与cumsum()
x2技巧一起使用:
df[df.groupby('X').Y.apply(lambda x: x.cumsum().cumsum()).le(1)]
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
5 B 0 52
6 B 1 66
8 C 0 68
9 C 0 72
10 D 1 65
答案 1 :(得分:1)
以不同的方式思考idxmax
df[df.index<=df.groupby('X').Y.transform('idxmax')]
Out[110]:
X Y Z
index
0 A 0 56
1 A 0 67
2 A 1 66
5 B 0 52
6 B 1 66
8 C 0 68
10 D 1 65