python - 创建新的 pd 数据框列,该列提供基于日期和星期起始数据的日期
问题描述
我有一个熊猫数据框,它有两列,第一列是“周开始”,另一列是“日”。我想创建一个新列,它使用其他两列中的数据来给出完整的日期。例如,从下表中,新列的第一个条目应该是 5/04/2021,第二个应该是 6/04/2021。
周开始 | 天 |
---|---|
2021 年 5 月 4 日 | 周一 |
2021 年 5 月 4 日 | 周二 |
2021 年 5 月 4 日 | 周三 |
我已经尝试了以下解决方案,但我得到了错误
g['Week Starting'] = pd.to_datetime(g['Week Starting'])
conditions = [ (g['Day'] == 'Monday'), (g['Day'] == 'Tuesay'), (g['Day'] ==
'Wednesday')]
values = [g['Week Starting'],(g['Week Starting'] + timedelta(days=1)),
(g['Week Starting'] + timedelta(days=2))]
g['Date'] = np.select(conditions, values)
错误:
DTypes <class 'numpy.dtype[uint8]'> 和 <class 'numpy.dtype[datetime64]'> 没有共同的 DType。例如,除非 dtype 是 ,否则它们不能存储在单个数组中object
。
谢谢。
解决方案
我认为这将是最简单的解决方案:
df = pd.DataFrame({"week_starting":["04/05/2021","04/05/2021","04/05/2021"],
"day":["Monday","Tuesday","Wednesday"]})
df['week_starting'] = pd.to_datetime(df['week_starting'])
conditions = {"Monday":0,"Tuesday":1,"Wednesday":2}
df["date"] = df.apply(lambda x:x['week_starting']+pd.Timedelta(conditions[x["day"]],"day"),axis=1)
您可以使用 apply 方法将 timedelta 添加到每个日期。
希望它有效!
推荐阅读
- python - AttributeError: 'str' object has no attribute 'send_keys' 错误在 Python 中使用 Selenium
- asp.net-mvc - 如何在 mvc razor 中使用 viewbag 实现图表 js
- visual-composer - 视觉作曲家 vc_grid > failed_to_get_id
- powershell - Powershell导航到特定目录
- google-analytics - 如何使用 Google Analytics API 启用广告功能?
- excel - Power Query 表达式错误:“记录”类型的值无法转换为“文本”类型
- .net-core - 如何翻译 Blazor 组件和 App.razor 中的字符串?
- python - i = self.pos[0] 说 TypeError: 'int' object is not subscriptable,我的代码的第 18 行和第 19 行
- django - 如何从列表中提取 JSON 值并以 django 模型形式呈现?
- sas - 如何在 SAS 中使用 WHERE 函数?