Python-有条件地按组删除第一行

时间:2019-03-25 21:24:14

标签: python pandas

我希望有条件地删除数据框中每个组的第一行。

在每个“ ID”中,第一行的“开始”列应始终为1。如果没有,我想从数据框中删除该行。

df = pd.DataFrame({'ID': ['A','A','B','B','C','C','C','D'],
               'Start': [0,1,1,0,0,0,1,1],
               'End': [1,0,0,1,1,1,0,0]})

  ID  Start  End
0  A      0    1
1  A      1    0
2  B      1    0
3  B      0    1
4  C      0    1
5  C      0    1
6  C      1    0
7  D      1    0

结果应如下所示:

result = pd.DataFrame({'ID': ['A','B','B','C','D'],
               'Start': [1,1,0,1,1],
               'End': [0,0,1,0,0]})

  ID  Start  End
0  A      1    0
1  B      1    0
2  B      0    1
3  C      1    0
4  D      1    0

2 个答案:

答案 0 :(得分:1)

使用groupbycumsum,然后在假设组总和必须从1开始的情况下进行过滤。

df[~df.groupby('ID')['Start'].cumsum().eq(0)]

  ID  Start  End
1  A      1    0
2  B      1    0
3  B      0    1
6  C      1    0
7  D      1    0

答案 1 :(得分:1)

尝试使用idxmaxtransform

df[df.index>=df.groupby('ID').Start.transform('idxmax')]