python - 基于日期时间对象添加季节列时遇到问题
问题描述
我正在尝试完成我的工作项目,但我被困在某个点上。
我拥有的数据框的一部分是这样的:
年月 | 年 | 月 |
---|---|---|
2007-01 | 2007年 | 1 |
2009-07 | 2009 | 7 |
2010-03 | 2010 | 3 |
但是,我想添加“季节”列。我正在说明足球赛季,赛季专栏需要说明球员踢的赛季。所以如果month等于或小于3,“season”列需要对应((year-1),“/”,year),如果大于(year,“/”,(year + 1))。该表应如下所示:
年月 | 年 | 月 | 季节 |
---|---|---|---|
2007-01 | 2007年 | 1 | 2006/2007 |
2009-07 | 2009 | 7 | 2009/2010 |
2010-03 | 2010 | 3 | 2009/2010 |
希望其他人可以帮助我解决这个问题。
这是创建第一个表的代码:
import pandas as pd
from datetime import datetime
df = pd.DataFrame({'year_month':["2007-01", "2009-07", "2010-03"],
'year':[2007, 2009, 2010],
'month':[1, 7, 3]})
# convert the 'Date' columns to datetime format
df['year_month']= pd.to_datetime(df['year_month'])
提前致谢!
解决方案
可以使用来指定条件,根据条件的/np.where()
获取对应的字符串,如下:True
False
df['season'] = np.where(df['month'] <= 3,
(df['year'] - 1).astype(str) + '/' + df['year'].astype(str),
df['year'].astype(str) + '/' + (df['year'] + 1).astype(str))
结果:
year_month year month season
0 2007-01-01 2007 1 2006/2007
1 2009-07-01 2009 7 2009/2010
2 2010-03-01 2010 3 2009/2010
推荐阅读
- javascript - react中的自定义排序
- talend - Talend - 如何禁用检查额外功能?
- python - 无法通过烧瓶从 MySQL 检索数据
- java - AST 视图:Eclipse 插件不显示 ATS 的节点并显示不支持的 JLS
- tensorflow - 当我在 jupyter 中导入 tensorflow 时弹出以下错误
- powerbi - Power Query 或 Power BI - 如果单元格为空白,则从所述单元格上方最近的行中复制值
- json - 如何仅在响应中的 onclick 事件后映射 json 列表?
- centos7 - 如何解决 yum update 上的 multilib 问题?
- sublimetext3 - 自动格式化失败,缓冲区未更改:崇高文本
- python - 如何在 SQLAlchemy ORM 中过滤给定字符串长度的列?