繁体   English   中英

熊猫数据透视表与外部列

[英]Pandas Pivot Table with external columns

我有一些日期列表,例如:dates_list = [201701,201702,201703,201704]。 这是特定报告所需日期的用户输入。

我有一个包含三列的数据库:id,date和value。

我的数据库有时没有用户询问的所有日期的记录(例如:它只有201701和201702的记录)。 df是我的数据库。 我有这个命令:

raw = pd.pivot_table(df, index=['id'],
                         columns=['date'], values=['value'],
                         aggfunc=[np.sum], fill_value=0, margins=False)

当然,这将返回仅包含两列的数据透视表:201701和201702。

我想知道是否可以在数据透视表构造中使用dates_list作为列标签,以便返回201703和201704的满列零。如果不可能,有人知道这个问题的最佳方法吗?

提前致谢

样本数据:

 df = pd.DataFrame({'id':[1,1,2,1,2],
                    'date': [201701,201701,201701,201702,201702],
                    'value': [0.04, 0.02, 0.07, 0.08, 1.0]})
 df

     date  id  value
0  201701   1   0.04
1  201701   1   0.02
2  201701   2   0.07
3  201702   1   0.08
4  201702   2   1.00

raw = pd.pivot_table(df, index=['id'], columns=['date'], values=['value'],
                     aggfunc=[np.sum], fill_value=0, margins=False)

        sum
  value
date 201701 201702
id
1      0.06   0.08
2      0.07   1.00

date_list = [201701, 201702, 201703, 201704]

raw.reindex(columns=date_list, fill_value=0)

我得到了ValueError:缓冲区dtype不匹配,预期'Python对象'但是'长了'

你可以在pivot_table之后pivot_table reindex

pd.pivot_table(df, index=['id'],
                         columns=['date'], values=['value'],
                         aggfunc=[np.sum], fill_value=0, margins=False).\
    reindex(columns=[yourlist],fill_value=0)

更新

pd.pivot_table(df, index='id', columns='date', values='value',aggfunc='sum', fill_value=0, margins=False).reindex(columns=[201701,201702,201703])
Out[115]: 
date  201701  201702  201703
id                          
1       0.06    0.08     NaN
2       0.07    1.00     NaN

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM