我希望有条件地删除数据框中每个组的第一行。
在每个“ 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
答案 0 :(得分:1)
使用groupby
和cumsum
,然后在假设组总和必须从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)
尝试使用idxmax
和transform
df[df.index>=df.groupby('ID').Start.transform('idxmax')]