我有以下数据帧,其中-
和$
是数据
A B C 01/01/18 01/08/18
- - - $ $
- - - $ $
- - - $ $
我想转化为以下内容
A B C Period Cost
- - - 01/01/18 $
- - - 01/01/18 $
- - - 01/01/18 $
- - - 01/08/18 $
- - - 01/08/18 $
- - - 01/08/18 $
我知道我可以为每个期间df1 and df2
然后为total = df2.append(df1)
创建两个数据框,但是我必须为该年度创建52个数据框。有没有更简单的方法可以使用一些精美的移调来做到这一点?
我正在尝试执行以下df.grouby(['A','B',C'])
,但我认为我需要先df.transpose()
。如果有人可以用这种方法帮助我,即使在SQL中也可以,我将不胜感激。
答案 0 :(得分:1)
这就是pandas.melt
的作用:
pd.melt(df, id_vars=['A', 'B', 'C'], var_name='Period', value_name='Cost')
# A B C Period Cost
#0 - - - 01/01/18 $
#1 - - - 01/01/18 $
#2 - - - 01/01/18 $
#3 - - - 01/08/18 $
#4 - - - 01/08/18 $
#5 - - - 01/08/18 $
您还可以将未更改的列设置为索引,然后stack
设置其他列:
ids = ['A', 'B', 'C']
df.set_index(ids).stack().rename_axis(ids + ['Period']).rename('Cost').reset_index()
# A B C Period Cost
#0 - - - 01/01/18 $
#1 - - - 01/08/18 $
#2 - - - 01/01/18 $
#3 - - - 01/08/18 $
#4 - - - 01/01/18 $
#5 - - - 01/08/18 $