使用组合的字符串和列表作为列标题构造新的Pandas Dataframe

时间:2019-10-18 19:51:42

标签: python python-3.x pandas dataframe

我正在尝试在Pandas中构建一个新的数据框。结果数据框将需要部门作为索引和日期范围的顶部。到目前为止,我有以下内容:

#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]

我尝试将单词“ departments”设置为变量,并将其传递给相同的结果。我也尝试过调整语法(括号,括号等),但没有成功。

我的问题是-我是否需要通过“ For”循环或先添加列表,然后再添加附加列来完成此操作,还是有一种方法可以通过以下方式将字符串和列表传递到Pandas数据框中?创建为“列”。

2 个答案:

答案 0 :(得分:1)

使用*,即iterable unpacking operator

打开包含日期范围的可迭代包
df = pd.DataFrame(columns=['department', *timeframes_yrs])

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

答案 1 :(得分:1)

每个pandas.DataFrame columns的文档都采用类似数组的形式。现在,您要在列列表中的内部中传递日期列表,因此熊猫认为您只需要两列。 @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