python - 如何基于其他两个包含日期的列创建 pandas DataFrame 列?
问题描述
我有一个带有两个日期列(A 和 B)的 pandas 数据框,我想创建一个第三列(C),其中包含使用 A 列和 B 列的日期使用月份和年份创建的日期。显然我需要更改就像我们尝试创建 2020 年 2 月 31 日那样,这几个月的日期不存在,它需要将其更改为 2020 年 2 月 29 日。
例如
import pandas as pd
df = pd.DataFrame({'A': ['2020-02-21', '2020-03-21', '2020-03-21'],
'B': ['2020-01-31', '2020-02-11', '2020-02-01']})
for c in df.columns:
dfx[c] = pd.to_datetime(dfx[c])
然后我想创建一个新列 C ,它是一个新的日期时间,即:
年份 = df.A.dt.year
月 = df.A.dt.month
日 = df.B.dt.day
我不知道如何创建此列。你能帮忙吗?
解决方案
这是使用 pandas 的时间序列功能的一种方法:
import pandas as pd
# your example data
df = pd.DataFrame({'A': ['2020-02-21', '2020-03-21', '2020-03-21'],
'B': ['2020-01-31', '2020-02-11', '2020-02-01']})
for c in df.columns:
# keep using the same dataframe here
df[c] = pd.to_datetime(df[c])
# set back every date from A to the end of the previous month,
# then add the number of days from the date in B
df['C'] = df.A - pd.offsets.MonthEnd() + pd.TimedeltaIndex(df.B.dt.day, unit='D')
display(df)
结果:
A B C
0 2020-02-21 2020-01-31 2020-03-02
1 2020-03-21 2020-02-11 2020-03-11
2 2020-03-21 2020-02-01 2020-03-01
正如您在第 0 行中看到的那样,这并不完全按照您的建议处理“2 月 31 日”的情况,但仍以合乎逻辑的方式处理。
推荐阅读
- microsoft-graph-api - OneDrive 文件下载返回 95 字节内容
- bash - Bash 脚本比较结合 getfattr
- airflow - 如何通过 Airflow 中的 task_id 获取上游任务的任务实例?
- postgresql - 为什么我在此加入时收到此 PostgreSQL 错误...?
- javascript - 在 Google Chrome 开发工具中,对象前面的字母是什么意思?
- azure - Azure 应用程序配置:labelFilter:是否可以“首选”某个标签而不排除其他标签?
- reactjs - 转到上一页下一个js应用程序时不显示数据
- swift - 为什么 CKFetchRecordsOperation 不起作用?
- keras - 升级tensorflow2.1后,出现“RuntimeError: tf.placeholder() is not compatible with eager execution。”
- build.gradle - 使用 swagger-codegen-plugin 时避免生成 build.gradle