跨列追加(或SQL)

2024-06-02 08:37:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的dataframe,其中-$是数据

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中,我也会很感激。你知道吗


Tags: and数据方法dataframedfsqlperiodtotal
1条回答
网友
1楼 · 发布于 2024-06-02 08:37:39

这就是^{}的作用:

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    $

相关问题 更多 >