Pandas按dayofweek分组后如何获取day_name()作为图表标签
报错原因:s1.index.dayofweek返回的是0~6的整数,分组后g1的索引为Int64类型,不支持DatetimeIndex专属的day_name()方法。
最优解决方法
按使用场景选择以下两种方案即可:
方案1:直接按周几名称分组(无特殊需求优先选该方案)
不需要后续用到周几的整数序号时,直接将day_name()的返回值作为分组键,一步得到带周几名称索引的结果:
# 默认返回英文周几名称 g1 = s1.groupby(s1.index.day_name()).mean() # 如需中文周几名称,传入对应locale参数即可 g1 = s1.groupby(s1.index.day_name(locale='zh_CN.UTF-8')).mean() # 如需按周一到周日的自然顺序排序,配合reindex调整即可 week_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] g1 = g1.reindex(week_order)
方案2:保留整数索引的同时生成周几标签
如果已经完成分组计算,或者后续需要用到0~6的周几序号,直接对现有Int64索引做映射即可,不需要重新计算分组:
# 方法A:通过pandas内置方法转换,适配多语言场景 week_labels = pd.to_datetime(g1.index, unit='D', origin='1970-01-04').day_name() # 方法B:手动映射,性能更高 week_map = {0:'Monday',1:'Tuesday',2:'Wednesday',3:'Thursday',4:'Friday',5:'Saturday',6:'Sunday'} week_labels = g1.index.map(week_map)
内容的提问来源于stack exchange,提问作者anonaka
相关产品推荐
相关产品推荐

