Если хотите, чтобы строки были максимальными ,
из Col1
для последовательных групп по Col2
и Col3
, используйте:
g = df[['Col2','Col3']].ne(df[['Col2','Col3']].shift()).any(1).cumsum()
df1 = df.loc[df.groupby(g)['Col4'].idxmax()]
print (df1)
Col1 Col2 Col3 Col4
2 dog,bat,cat Z st02 2
4 dog,bat,cat,elephant Y st02 3
7 tiger,lion,leopard,cheetah Z st01 3
9 dog,tiger,leopard,cheetah Y st01 3
11 cheetah,eagle,jaguar,Kangaroo,zebra Z st02 4
РЕДАКТИРОВАТЬ:
df = pd.DataFrame({'Col1': ['dog', 'dog,cat', 'dog,bat,cat', 'bat,cat,elephant', 'dog,bat,cat,elephant', 'tiger', 'lion,leopard,cheetah', 'tiger,lion,leopard,cheetah', 'dog,tiger,cheetah', 'dog,tiger,leopard,cheetah', 'eagle,jaguar,Kangaroo,zebra', 'cheetah,eagle,jaguar,Kangaroo,zebra', 'pigeon', 'pigeon,parrot', 'dove,parrot', 'pigeon,parrot', 'pigeon,parrot,dove'], 'Col2': ['Z', 'Z', 'Z', 'Y', 'Y', 'Z', 'Z', 'Z', 'Y', 'Y', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z'], 'Col3': ['st02', 'st02', 'st02', 'st02', 'st02', 'st01', 'st01', 'st01', 'st01', 'st01', 'st02', 'st02', 'st01', 'st01', 'st01', 'st01', 'st01'], 'Col4': [0, 1, 2, 2, 3, 0, 2, 3, 2, 3, 3, 4, 0, 1, 1, 1, 2]})
print (df)
Col1 Col2 Col3 Col4
0 dog Z st02 0 <group1
1 dog,cat Z st02 1
2 dog,bat,cat Z st02 2
3 bat,cat,elephant Y st02 2 <group2
4 dog,bat,cat,elephant Y st02 3
5 tiger Z st01 0 <group3
6 lion,leopard,cheetah Z st01 2
7 tiger,lion,leopard,cheetah Z st01 3
8 dog,tiger,cheetah Y st01 2 <group4
9 dog,tiger,leopard,cheetah Y st01 3
10 eagle,jaguar,Kangaroo,zebra Z st02 3 <group5
11 cheetah,eagle,jaguar,Kangaroo,zebra Z st02 4
12 pigeon Z st01 0 <group6
13 pigeon,parrot Z st01 1
14 dove,parrot Z st01 1
15 pigeon,parrot Z st01 1
16 pigeon,parrot,dove Z st01 2
g = df[['Col2','Col3']].ne(df[['Col2','Col3']].shift()).any(1).cumsum()
df1 = df.loc[df.groupby(g)['Col4'].idxmax()]
print (df1)
Col1 Col2 Col3 Col4
2 dog,bat,cat Z st02 2
4 dog,bat,cat,elephant Y st02 3
7 tiger,lion,leopard,cheetah Z st01 3
9 dog,tiger,leopard,cheetah Y st01 3
11 cheetah,eagle,jaguar,Kangaroo,zebra Z st02 4
16 pigeon,parrot,dove Z st01 2