Создание нового Pandas Dataframe с использованием комбинированной строки и списка в качестве заголовков столбцов - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь создать новый фрейм данных в Пандах. В результирующем фрейме данных должны быть отделы, поскольку индекс и диапазон дат располагаются сверху. Пока у меня есть следующее:

#generate a list of years within report range
timeframes_yrs = pd.date_range(start_date,end_date, freq='12MS').strftime('%m/%d/%Y').tolist()
#create a new dataframe with columns named after the output of the list
df=pd.DataFrame(columns=['department', list(timeframes_yrs)])

Похоже, что это столбец для отдела (как и ожидалось), но затем приводится столбец, содержащий весь мой список.

Empty DataFrame
Columns: [department, [01/01/2017, 01/01/2018, 01/01/2019]]

В идеалеЯ хочу, чтобы каждый из них был столбцами:

Empty DataFrame
Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]

Я попытался установить переменные слова «отделы» и передать их с тем же результатом. Я также попытался изменить синтаксис (скобки, круглые скобки и т. Д.), Но безуспешно.

Мой вопрос - мне нужно выполнить это с помощью цикла «For» или сначала добавить список, а затем добавить дополнительныйпозже, или есть способ сделать это, передав строку и список в фрейм данных Pandas при создании в виде «столбцов».

Ответы [ 2 ]

1 голос
/ 18 октября 2019

Согласно документации для pandas. DataFrame columns занимает что-то похожее на массив. Прямо сейчас вы передаете список дат в пределах списка столбцов, поэтому pandas считает, что вам нужны только два столбца. У @rafaelc есть хороший способ создать все ваши столбцы. Вы упомянули, что вы хотели, чтобы департаменты использовались в качестве индекса, поэтому в этом случае попробуйте передать только список дат в виде столбцов и использовать список департаментов в качестве индекса:

departments = ['sales', 'marketing', 'it']
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=departments, columns=(['a', 'b', 'c']))

           a  b  c
sales      1  2  3
marketing  4  5  6
it         7  8  9
1 голос
/ 18 октября 2019

Распакуйте итерируемые диапазоны дат, используя *, а именно iterable unpacking operator

df = pd.DataFrame(columns=['department', *timeframes_yrs])

Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...