我有以下pandas DataFrame
:
id quantity cost type
2016-06-18 1700057817 2 2383 A
2016-06-18 1700057817 1 744 B
2016-06-19 1700057817 5 934 A
此处的日期为index
。我需要像这样转动表格:
id A-quantity A-cost B-quantity B-cost
2016-06-18 1700057817 2 2383 1 744
2016-06-19 1700057817 5 934 NA NA
到目前为止我尝试了什么:
我尝试了pivot
的许多用法。这就像我得到的那样接近:
>>> df.pivot(index='id', columns='type')
quantity cost
type A B A B
id
1700057817 2 1 2383 744
问题:
date
索引消失了date
- id
组合我还浏览了几篇关于SO和其他地方的文章,包括this one。
答案 0 :(得分:2)
您set_index
append=True
后跟unstack
并保留MultiIndex
:
df.set_index(['id', 'type'], append=True).unstack()
或强行重新格式化您的要求:
# step-one same as above
df1 = df.set_index(['id', 'type'], append=True).unstack()
# collapse MultiIndex columns into '-' separated string
df1.columns = df1.columns.swaplevel(0, 1).to_series().str.join('-')
# move 'Id' from the index back into dataframe proper
df1 = df1.reset_index(1)
df1
答案 1 :(得分:1)
您可以使用reset_index
来保留日期。
df.index.name = 'date'
df = df.reset_index().pivot_table(index=['date', 'id'], columns=['type'])
df = df.sort_index(axis=1, level=1)
df.columns = ['-'.join(tup[::-1]) for tup in df.columns]