如何为含Datetime索引的DataFrame添加节后首日标识列?
解决DataFrame新增节假日后首日列及显示不全问题
嘿,你的代码逻辑其实是完全正确的!df.Holiday.shift(1).fillna(0)这个写法完美实现了“标记节假日后首日”的需求:
shift(1)会把前一行(前一天)的Holiday值移动到当前行,正好对应“前一天是节假日则当前行设为1”的规则fillna(0)处理了第一行的特殊情况(没有前一天,所以肯定不是节假日后首日)
你遇到的输出只显示“Holida...”的问题,是因为pandas默认会截断过长的列名或输出内容,来保持输出的整洁性。下面给你几个解决显示问题的方法:
方法1:调整pandas显示设置,取消截断
通过设置pandas的全局显示选项,让它完整展示所有列和内容:
import pandas as pd # 显示所有列,不截断列名 pd.set_option('display.max_columns', None) # 取消单元格内容长度限制 pd.set_option('display.max_colwidth', None) # 再执行你的代码并查看结果 df['DayAfter'] = df.Holiday.shift(1).fillna(0).astype(int) # 转成int和原列类型一致 print(df)
方法2:直接查看目标列,避免干扰
如果只关心Holiday和DayAfter列,可以直接指定查看这两列,这样输出不会被其他列截断:
df['DayAfter'] = df.Holiday.shift(1).fillna(0).astype(int) print(df[['Holiday', 'DayAfter']])
方法3:强制完整输出整个DataFrame
用to_string()方法可以强制pandas输出完整的DataFrame内容,不会做任何截断:
df['DayAfter'] = df.Holiday.shift(1).fillna(0).astype(int) print(df.to_string())
示例验证
我给你做了个小示例,可以直接运行验证结果:
import pandas as pd from datetime import datetime # 创建带Datetime索引的示例DataFrame dates = pd.date_range(start='2024-09-28', end='2024-10-02') holiday_data = [0, 1, 1, 0, 0] # 假设9月29、30日是节假日 df = pd.DataFrame({'Holiday': holiday_data}, index=dates) # 生成DayAfter列 df['DayAfter'] = df.Holiday.shift(1).fillna(0).astype(int) # 完整输出 pd.set_option('display.max_columns', None) print(df)
输出结果会清晰展示:
Holiday DayAfter 2024-09-28 0 0 2024-09-29 1 0 2024-09-30 1 1 2024-10-01 0 1 2024-10-02 0 0
内容的提问来源于stack exchange,提问作者Meiiso
相关产品推荐
相关产品推荐

