Использование целых чисел из столбцов в качестве индексаторов срезов строки в другом столбце - PullRequest
1 голос
/ 13 марта 2019

У меня есть df:

string_pos = {'string': [ 'aabb', 'ddcc', ],
              'position_1': [0, 1],
              'position_2': [3, 4]}

вывод:

    string  position_1  position_2
0    aabb        0          3
1    ddcc        1          4

Затем я пишу то, что я думаю, добавит новый столбец с подстрокой столбца 'string':

df['short_string'] = df.string.str[df['position_1'], df['position_2']]

Но возвращается:

    string  position_1  position_2  short_string
  0  aabb       0           3           NaN
  1  ddcc       1           4           NaN

Я пытаюсь получить:

    string  position_1  position_2  short_string
  0  aabb       0           3           aab
  1  ddcc       1           4        dcc

1 Ответ

1 голос
/ 13 марта 2019

Я думаю, вам нужно обработать каждую строку на DataFrame.apply с lambda function:

df['short_string'] = df.apply(lambda x: x['string'][x['position_1']:x['position_2']], axis=1)

Или использовать списочное понимание с zip:

zipped = zip(df['string'], df['position_1'], df['position_2'])
df['short_string'] = [a[b:c] for a,b,c in zipped]
print (df)
  string  position_1  position_2 short_string
0   aabb           0           3          aab
1   ddcc           1           4          dcc
...