Использовать apply
с индексированием:
df['Main'] = df.apply(lambda x: x['Main'][:x['Length']], axis=1)
Или составить список с помощью zip
, если нет значений NaN
s:
df['Main'] = [a[:b] for a, b in zip(df['Main'], df['Length'])]
print(df)
Main Length
0 Sri p 5
1 sr 2
2 R 1
3 Ra 2
Для более общего решения можно использовать if-else
:
df['Main'] = [a[:b] if len(a) < b else a for a, b in zip(df['Main'], df['Length'])]
print(df)
Main Length
0 Sri playnig well cricket 100
1 sri went out 2
2 Ram is in 1
3 Ram went to UK,US 2