Преобразуйте содержимое разделенных запятыми ячеек в несколько ячеек в тех же столбцах - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть файл Excel со следующими типами данных.

Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree 5.56

Данные состоят из строк такого же типа. Числовое значение находится в следующей ячейке.Я хочу преобразовать его в следующий формат -

Pink_Floyd 5.56
Beatles    5.56
Pearl_Jam  5.56
Porcupine_Tree 5.56 

Как это сделать?

1 Ответ

0 голосов
/ 17 сентября 2018

Использование:

df = pd.DataFrame({'A': ['Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree', 'Beatles'], 
                   'B': [5.56, 10.0]})
print (df)
                                             A      B
0  Pink_Floyd,Beatles,Pearl_Jam,Porcupine_Tree   5.56
1                                      Beatles  10.00

s = (df.pop('A').str.split(',', expand=True)
       .stack()
       .reset_index(level=1, drop=True)
       .rename('A'))

df = df.join(s).reset_index(drop=True)[['A','B']]

Объяснение

  1. Извлечь столбец A по pop
  2. Затем split до DataFrame
  3. Изменить на stack
  4. Затем reset_index для удаления первого уровня MultiIndex
  5. Изменить имя столбца на rename
  6. Последний join к оригиналу и при необходимости измените порядок столбцов на list

Или создать новый DataFrame с помощью конструктора:

from itertools import chain

a = df['A'].str.split(',')

df = pd.DataFrame({
    'A' : list(chain.from_iterable(a.values.tolist())), 
    'B' : df['B'].values.repeat(a.str.len())
})

print (df)
                A      B
0      Pink_Floyd   5.56
1         Beatles   5.56
2       Pearl_Jam   5.56
3  Porcupine_Tree   5.56
4         Beatles  10.00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...