结合pandas数据透视表多索引标头 - 一个时间戳,一个字符串

时间:2018-02-02 21:32:24

标签: python pandas join pivot multi-index

我有一个像这样的pandas数据框:

    weatherdate publishdate weathernode value
384 2018-01-30  2018-01-30  CYWG    -11.67
385 2018-01-31  2018-01-30  CYWG    -15.56
432 2018-01-30  2018-01-30  CYYZ    -8.33
433 2018-01-31  2018-01-30  CYYZ    -5.00
512 2018-01-31  2018-01-31  CYWG    -17.22
560 2018-01-31  2018-01-31  CYYZ    -6.67

两个日期列都是datetime64格式。我将df转换为如下所示的数据透视表:

dffcst = pd.pivot_table(df, index='weatherdate', columns=['weathernode','publishdate'], values='value') 

得到如此的输出:

weathernode   CYWG                        CYYZ
publishdate   2018-01-30    2018-01-31  2018-01-30  2018-01-31
weatherdate             
2018-01-30    -11.67          NaN         -8.33       NaN
2018-01-31    -15.56         -17.22       -5.00      -6.67    

我想结合上面两行列名,得到一个像我在excel中构建的输出(注意下面的格式是最好的情况 - 删除年/月/日之间的破折号,不日期和机场代码之间的空格):

weatherdate CYWG20180130 CYWG20180131 CYYZ20180130 CYYZ20180131
1/30/2018   -11.67        NaN          -8.33        NaN
1/31/2018   -15.56        -17.22        -5          -6.67

我试图像这样加入他们:

dffcst.columns = [''.join(col) for col in dffcst.columns]

但是我收到以下错误:

TypeError:序列项1:预期的str实例,找到时间戳

所以pandas无法将第一行列名中的日期连接到第二行列名中的字符串。

我尝试过以下代码:

dffcst.columns = [''.join(str(col)) for col in dffcst.columns]

它可以工作,但新的列标题对我来说是两个难以使用的,所以我需要一个替代解决方案,就像我在上面的Excel中构建的那样。这是一个笨重的列标题的示例:

(' CYWG',时间戳(' 2018-01-30 00:00:00'))

目标是将此表导出到csv,该csv将被拉入excel模型。我可以通过偏移匹配查找excel模型,这样我就可以在各种不同的预测日期查找各种气象站。很高兴听到任何人对这个想法的想法。

1 个答案:

答案 0 :(得分:0)

将Timestamp对象转换为strftime的字符串:

dffcst.columns = [c[0] + pd.datetime.strftime(c[1], '%y%m%d') for c in dffcst.columns]