python - Python数据框日期加上来自另一列的月份变量
问题描述
我有一个带有 date 和 month_diff 变量的数据框。我想根据以下逻辑得到一个新的日期(命名为 Target_Date):例如日期是 2/13/2019,month_diff 是 3,那么目标日期应该是原始日期的月末再加上 3 个月,即 2019 年 5 月 31 日
我尝试了以下方法首先获取 traget 日期:
df["Target_Date"] = df["Date"] + pd.DateOffset(months = df["month_diff"])
但它失败了,据我所知,dateoffset 中的参数应该是一个变量或一个固定数字。
我也试过:
df["Target_Date"] = df["Date"] + relativedelta(months = df["month_diff"])
它也失败了。
任何人都可以帮忙吗?谢谢你。
编辑:这是一个拥有数百万行的大型数据集。
解决方案
你可以试试这个
import pandas as pd
from dateutil.relativedelta import relativedelta
df = pd.DataFrame({'Date': [pd.datetime(2019,1,1), pd.datetime(2019,2,1)], 'month_diff': [1,2]})
df.apply(lambda row: row.Date + relativedelta(months=row.month_diff), axis=1)
或列表理解
[date + relativedelta(months=month_diff) for date, month_diff in df[['Date', 'month_diff']].values]
推荐阅读
- python - Keras 预测时间不一致
- reactjs - 如何将 react-draft-wysiwyg 自定义组件与 React-Final-Form 集成
- keyboard - 是否可以使用 FreePascal 测试是否按下了特定键?
- elasticsearch - ElasticSearch 查询在数组字段中查找大于特定长度的值
- python - Python:如何在对数空间中的两条曲线之间绘制等距曲线?
- ruby-on-rails - Docker Compose 和 Rails: Bundler::GemNotFound 在启动时。bundler 是不是在寻找正确的宝石?
- ios - 使用哪些访问级别使枚举仅可用于该项目
- android - 将值传递到另一个页面以打开 PDF
- java - The method addFilter(SerializablePredicate) in the type InMemoryDataProvider is not applicable for the arguments (( desc) -> {})
- python - 如何从 tkinter 的子窗口修改根窗口?