Как насчет этого:
df = pd.DataFrame(data = {'A': [1,2,3],
'B': ['a b c d', 'e f g h', 'i j k l']})
y = lambda x : df.loc[df['A']==2,'B'].str[0:2*x+2] + df.loc[df['A']==2,'B'].str[-1]
df.loc[df1['A']==2,'B'] = y(1)
Тогда df
находится в розыске:
A B
0 1 a b c d
1 2 e f h
2 3 i j k l
Вы были довольно близки к решению, единственная проблема в том, что str[x]
возвращает значение, заключенное в объект Series . Вы можете исправить это, извлекая значение из Серии, как показано:
y = lambda x : df.loc[df['colA']==2,'colB'].str.split().str[x].values[0]
df.loc[df['colA']==2,'colB'] = y(0) + ' ' + y(1) + ' ' + y(-1)
Вы также можете добиться того же, используя функцию apply
df.loc[df['colA']==2, 'colB'] = df.loc[df['colA']==2,'colB'].apply(lambda x: ' '.join(x.split()[0:2] + [x.split()[-1]]))