Pandas基于DataFrame现有date列添加月份与季节二进制分类列的实现方法
实现代码
import pandas as pd # 1. 确保date字段为datetime格式,提取月份数值 data['date'] = pd.to_datetime(data['date']) data['month'] = data['date'].dt.month # 2. 生成12个月份的二进制编码列 month_names = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'] month_dummies = pd.get_dummies(data['month'], prefix='', prefix_sep='') month_dummies = month_dummies.reindex(columns=range(1,13), fill_value=0) month_dummies.columns = month_names data = pd.concat([data, month_dummies], axis=1) # 3. 生成4个季节的二进制编码列(匹配你示例的划分规则:12/1/2月为冬、3/4/5月为春、6/7/8月为夏、9/10/11月为秋) def get_season(month): if month in [12,1,2]: return 'winter' elif month in [3,4,5]: return 'spring' elif month in [6,7,8]: return 'summer' else: return 'fall' data['season'] = data['month'].apply(get_season) season_dummies = pd.get_dummies(data['season'], prefix='', prefix_sep='') data = pd.concat([data, season_dummies], axis=1) # 4. 删除临时辅助列 data = data.drop(columns=['month', 'season'])
说明
- 输出完全符合你给出的示例效果,所有分类列均为0/1二进制编码
- 仅依赖pandas自带方法实现,运行效率高,无需手写循环逐行判断
- 列名完全匹配你要求的
january至december、winter/spring/summer/fall的小写命名规则
内容的提问来源于stack exchange,提问作者CG7
相关产品推荐
相关产品推荐

