Разделение значений столбцов в пандах по разделителю без потери разделителя - PullRequest
1 голос
/ 10 июля 2019

Привет! У меня есть датафрейм в следующем формате:

df = pd.DataFrame(np.array([[1, 2, 'Apples 20pk ABC123', 4, 5], [6, 7, 
'Oranges 40pk XYZ123', 9, 0], [5, 6, 'Bananas 20pk ABC123', 8, 9]]), columns=
               ['Serial #', 'Branch ID', 'Info', 'Value1', 'Value2'])

         Serial#  Branch ID    Info                  Value1   Value2
  0         1       2          Apples 20pk ABC123       4        5
  1         6       7          Bananas 20pk ABC123      9        0
  2         5       6          Oranges 40pk XYZ123      8        9

Я хочу разделить значения столбца «Информация» на основе символа «pk». По сути, я хочу создать два новых столбца, как в приведенном ниже кадре данных:

         Serial#  Branch ID    Package        Branch   Value1   Value2
  0         1       2          Apples 20pk    ABC123      4        5
  1         6       7          Bananas 20pk   ABC123      9        0
  2         5       6          Oranges 40pk   XYZ123      8        9

Я пытался использовать:

info = df["Info"].str.split("pk ", n=1, expand=True)
df['Package'] = branch[0]
df['Branch'] = branch[1]
del df['Info']

но в результате в столбце df 'Package' я получаю только "Яблоки 20" вместо "Яблоки 20pk".

Я хотел разделить, используя символ «» (пробел), но затем я получил три значения («Яблоки», «20pk», «ABC123»).

Поскольку имеется n рядов (а не только 3), мне было интересно, как наиболее эффективно это сделать? Спасибо!

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Мы можем использовать регулярное выражение здесь с положительным взглядом.В этом случае мы разбиваем пробел (\s), которому предшествует (?<=) строка pk:

df['Info'].str.split('(?<=pk)\s', expand=True)
              0       1
0   Apples 20pk  ABC123
1  Oranges 40pk  XYZ123
2  Bananas 20pk  ABC123

Чтобы получить ожидаемый результат, мы создаем двастолбцы за один раз и затем Info:

df[['Package', 'Branch']] = df['Info'].str.split('(?<=pk)\s', expand=True)

df.drop('Info', axis=1, inplace=True)
  Serial # Branch ID Value1 Value2       Package  Branch
0        1         2      4      5   Apples 20pk  ABC123
1        6         7      9      0  Oranges 40pk  XYZ123
2        5         6      8      9  Bananas 20pk  ABC123
0 голосов
/ 10 июля 2019

Не могли бы вы добавить pk в столбец после этого?

...