【问题标题】:Pandas: pivot dataframe and preserve additional non-numeric columnPandas:透视数据框并保留额外的非数字列
【发布时间】:2017-10-05 10:21:33
【问题描述】:

我有一些列表格式的数据:150 多个组织的数据,每个 12 个月系列的数据。它的原始形式如下所示:

Name Size   Date  Figure
Org1 Medium Jun16 8.36
Org1 Medium Jul16 7.55
Org1 Medium Aug16 8.57
...
Org1 Medium May17 9.41
Org2 Large  Jun16 12.12
Org2 Large  Jul16 11.44
...

因此,每个组织都有一个唯一的名称、十二个月的数据以及三种规模(小型、中型、大型)中的一种。我已经成功地调整了这些数字,为我提供了每个组织的时间序列,即,

Name Jun16 Jul16 Aug16 Sep16 Oct16...
Org1 8.36  7.55  8.57  7.66  9.43
Org2 12.12 11.44 11.01 12.01 10.44...

但我想包含另一列,其中包含每个组织的规模。我用于枢轴的代码是:

dataPivot = dataRaw.pivot_table(index='Name', columns ='Date'],
                              aggfunc='sum', values = 'Figure').fillna(0)

其中dataRaw 是从 .csv 读取的原始数据。我尝试将'Size' 添加到columns 字段,但这只是为每种尺寸提供了12 个额外的列!

【问题讨论】:

    标签: python pandas dataframe pivot-table


    【解决方案1】:

    这样做的一种方法是在基于大小创建新的df之后使用concat,即

    table = df.pivot_table(index='Name', columns ='Date', aggfunc='sum', values = 'Figure').fillna(0)
    
    size = df.groupby('Name').size().to_frame().rename(columns={0:'size'})
    
    ndf = pd.concat([table,size],1)
    

    基于样本数据的输出:

    Aug16 Jul16 Jun16 May17 尺寸 姓名 组织 1 8.57 7.55 8.36 9.41 4 组织 2 0.00 11.44 12.12 0.00 2

    如果您的意思是在数据框中添加 Size 列预设,则将该列名称添加到索引参数而不是列,即

    df.pivot_table(index=['Name','Size'], columns =['Date'],aggfunc='sum', values =['Figure','Size']).fillna(0).reset_index()
    

    输出:

    名称 尺寸 图 日期 Aug16 Jul16 Jun16 May17 0 组织 1 中 8.57 7.55 8.36 9.41 1 组织 2 大 0.00 11.44 12.12 0.00

    【讨论】:

    • 谢谢,这真的很接近我所追求的!我可能应该更清楚一点 - 我希望输出在最后一列中具有组织的大小(“中”、“大”、“小”),而不是计数。我可以更改代码中的第二行来实现这一点吗?
    • 我编辑的答案是您所关注的吗?更新评论真是巧合哈哈
    • 是的,这很完美。非常感谢!
    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    相关资源
    最近更新 更多