Функция для репликации строк фрейма данных, если столбец содержит список

#python #list #dataframe #replicate

#python #Список #фрейм данных #реплицировать

Вопрос:

Я не уверен, что это лучший способ назвать это. Если у меня есть фрейм данных и один из столбцов, давайте назовем его «Тегами», может содержать список, а может и нет. Если «Теги» — это список, то я хочу повторить эту строку столько раз, сколько уникальных элементов в столбце «Теги», но затем заменить элементы в этом столбце уникальным элементом для каждой строки.

Пример:

 import pandas as pd 

# create dummy dataframe
df = {'Date': ['2020-10-28'],
      'Item': 'My_fake_item',
      'Tags': [['A', 'B']],
      'Count': 3}

df = pd.DataFrame(df, columns=['Date', 'Item', 'Tags', 'Count'])
  

Приведет к:
Исходный фрейм данных

И мне нужна функция, которая изменит фрейм данных на этот:
Новый фрейм данных

Ответ №1:

Примените explode метод, например

 df_exploded = (
        df.set_index(["Date", "Item", "Count"])
        .apply(pd.Series.explode)
        .reset_index()
    )
  

приведет к

 df_exploded
>>>
    Date        Item         Count  Tags
0   2020-10-28  My_fake_item    3   A
1   2020-10-28  My_fake_item    3   B
  

и нет необходимости проверять, является ли элемент списком или нет в столбце

 import pandas as pd 

# create dummy dataframe
df = {'Date': ['2020-10-28', '2020-11-01'],
      'Item': ['My_fake_item', 'My_other_item'],
      'Tags': [['A', 'B'], 'C'],
      'Count': [3, 5]}

df = pd.DataFrame(df, columns=['Date', 'Item', 'Tags', 'Count'])
  

приведет к

           Date  Item          Count Tags
0   2020-10-28  My_fake_item    3   A
1   2020-10-28  My_fake_item    3   B
2   2020-11-01  My_other_item   5   C
  

Комментарии:

1. Спасибо, это сработало как шарм. Я никогда раньше не видел этого метода.