首页 > 解决方案 > Python - 按组有条件地删除第一行

问题描述

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

在每个“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

标签: pythonpandas

解决方案


使用groupbyand cumsum,然后在组 cumsums 必须从 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

推荐阅读