结合 pandas 数据透视表多索引标题 - 一个时间戳,一个字符串
Posted
技术标签:
【中文标题】结合 pandas 数据透视表多索引标题 - 一个时间戳,一个字符串【英文标题】:Combine pandas pivot table multi-index headers - one timestamp, one string 【发布时间】:2018-07-13 10:55:09 【问题描述】:我有一个像这样的熊猫数据框:
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: sequence item 1: expected str instance, Timestamp found
因此,pandas 无法将第一行列名中的日期连接到第二行列名中的字符串。
我试过以下代码:
dffcst.columns = [''.join(str(col)) for col in dffcst.columns]
它可以工作,但是新的列标题对我来说有两个难以使用,所以我需要一个替代解决方案,就像我在上面的 Excel 中构建的那样。这是笨重的列标题的示例:
('CYWG', 时间戳('2018-01-30 00:00:00'))
我们的目标是将此表导出为 csv,该 csv 将被拉入 Excel 模型。我可以使用偏移匹配查找 excel 模型,这样我就可以在各种不同的预测日期查找各种气象站。也很高兴听到任何人对这个想法的想法。
【问题讨论】:
【参考方案1】:使用strftime
将 Timestamp 对象转换为字符串:
dffcst.columns = [c[0] + pd.datetime.strftime(c[1], '%y%m%d') for c in dffcst.columns]
【讨论】:
谢谢彼得 - 这太棒了。不知道 strftime - 更多地研究它以上是关于结合 pandas 数据透视表多索引标题 - 一个时间戳,一个字符串的主要内容,如果未能解决你的问题,请参考以下文章