熊猫在另一列中出现某个值之前选择行的子集

时间:2019-03-13 21:18:35

标签: python pandas

我想从数据框中提取行的子集,然后在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

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以将groupbyapplycumsum() 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