使用日期值重塑/透视数据

时间:2018-10-16 15:34:11

标签: python-3.x pandas

我需要枢转/重塑长格式数据2种方式: 1)添加日期列(月末)并填写数值(总计) 2)添加日期列(月末)并填写日期值(在上一个枢轴中达到“总”值的月日)

我可以用1做

w2ui['my_grid']

但是,尝试使用'date'更改value参数会产生: DataError:没有要聚合的数字类型

我基本上想要两个df,一个是我完成的,另一个是相同格式的,但不是“ TOTAL”值是完成总计的“日期”。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:7)

set_indexunstack

这假设['country', 'tr_code', 'EOM']的组合是唯一的,并且如果不是的话将会中断。这就是为什么聚合功能很重要的原因。如果以及何时获得组合的多个观察值,我们需要一个规则。

data.set_index(['country', 'tr_code', 'EOM']).date.unstack()

EOM             2016-01-31 2016-02-28 2016-03-31
country tr_code                                 
fr      10             NaT 2016-02-01        NaT
        20             NaT 2016-02-23        NaT
uk      10      2016-01-12        NaT        NaT
        12             NaT        NaT 2016-03-04
usa     21      2016-01-23        NaT        NaT

aggfunc / pivot_table

默认的汇总功能为mean,这对于日期没有意义。 first可以。还可以使用ALollz在删除答案中使用的last

data.pivot_table(
    values='date', index=['country', 'tr_code'], columns='EOM', aggfunc='first')

EOM             2016-01-31 2016-02-28 2016-03-31
country tr_code                                 
fr      10             NaT 2016-02-01        NaT
        20             NaT 2016-02-23        NaT
uk      10      2016-01-12        NaT        NaT
        12             NaT        NaT 2016-03-04
usa     21      2016-01-23        NaT        NaT

groupby

pivot_table相同的操作方式少用迷人的方式

data.groupby(['country', 'tr_code', 'EOM']).date.first().unstack()

EOM             2016-01-31 2016-02-28 2016-03-31
country tr_code                                 
fr      10             NaT 2016-02-01        NaT
        20             NaT 2016-02-23        NaT
uk      10      2016-01-12        NaT        NaT
        12             NaT        NaT 2016-03-04
usa     21      2016-01-23        NaT        NaT