You can set the 'Owner' to a category so that it will appear in the order after you pivot:
df = pd.DataFrame({'Owner':['John Doe','Woody Woodpecker','Bart Simpson','Ringo Star','Woody Woodpecker',
'John Doe','Donald Duck','Woody Woodpecker','John Doe','Bart Simpson'],
'Lot':['A%02d' % n for n in np.arange(1,11)]})
df['Owner'] = pd.Categorical(df['Owner'],categories=pd.unique(df['Owner']))
What you are missing is a column to enumerate the unique rows per group:
df['N'] = df.groupby('Owner').cumcount()+1
Owner Lot N
0 John Doe A01 1
1 Woody Woodpecker A02 1
2 Bart Simpson A03 1
3 Ringo Star A04 1
4 Woody Woodpecker A05 2
5 John Doe A06 2
6 Donald Duck A07 1
7 Woody Woodpecker A08 3
8 John Doe A09 3
9 Bart Simpson A10 2
And changing this to the names you want, and you can pivot easily:
df['N'] = ['Lot'+str(i) for i in df['N']]
df.pivot(index='Owner',columns='N',values='Lot').reset_index()
N Owner Lot1 Lot2 Lot3
0 John Doe A01 A06 A09
1 Woody Woodpecker A02 A05 A08
2 Bart Simpson A03 A10 NaN
3 Ringo Star A04 NaN NaN
4 Donald Duck A07 NaN NaN