跨列追加熊猫(或SQL)

时间:2018-06-20 22:37:32

标签: python sql python-3.x pandas numpy

我有以下数据帧,其中-$是数据

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中也可以,我将不胜感激。

1 个答案:

答案 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    $