python - 将年和月列与 Pandas 干净地组合到单个日期列

标签 python pandas date datetime dataframe

我有看起来像这样的数据:

+----+------+-------+
| ID | YEAR | MONTH |
+----+------+-------+
| A  | 2017 |     1 |
| B  | 2017 |     2 |
| C  | 2017 |     3 |
| D  | 2017 |     4 |
| E  | 2017 |     5 |
| F  | 2017 |     6 |
+----+------+-------+

我想添加一个名为 DATE 的新列,它存储由 YEARMONTH 列的日期对象组成的新列。像这样的东西:
+----+------+-------+------------+
| ID | YEAR | MONTH |    DATE    |
+----+------+-------+------------+
| A  | 2017 |     1 | 2017-01-01 |
| B  | 2017 |     2 | 2017-02-01 |
| C  | 2017 |     3 | 2017-03-01 |
| D  | 2017 |     4 | 2017-04-01 |
| E  | 2017 |     5 | 2017-05-01 |
| F  | 2017 |     6 | 2017-06-01 |
+----+------+-------+------------+

我使用以下代码创建了该列,但想知道是否有更简洁的“Pythonic”单行代码。类似于 df['DATE']=date(df.year, df.month, 1) 的东西。
import pandas as pd
from datetime import date


ID  = ['A', 'B', 'C', 'D', 'E', 'F']
YEAR = [2017, 2017, 2017, 2017, 2017, 2017]
MONTH = [1, 2, 3, 4, 5, 6]


df = pd.DataFrame({'ID': ID, 'YEAR': YEAR, 'MONTH': MONTH})


DATE = []
for y, m in zip(df.YEAR, df.MONTH):
    DATE.append(date(y, m, 1))


df['DATE'] = DATE

最佳答案

选项 1
将具有 3 列的数据帧切片 - YEARMONTHDAY 传递给 pd.to_datetime

df['DATE'] = pd.to_datetime(df[['YEAR', 'MONTH']].assign(DAY=1))
df

  ID  MONTH  YEAR       DATE
0  A      1  2017 2017-01-01
1  B      2  2017 2017-02-01
2  C      3  2017 2017-03-01
3  D      4  2017 2017-04-01
4  E      5  2017 2017-05-01
5  F      6  2017 2017-06-01

选项 2
字符串连接,使用 pd.to_datetime
pd.to_datetime(df.YEAR.astype(str) + '/' + df.MONTH.astype(str) + '/01')

0   2017-01-01
1   2017-02-01
2   2017-03-01
3   2017-04-01
4   2017-05-01
5   2017-06-01
dtype: datetime64[ns]

关于python - 将年和月列与 Pandas 干净地组合到单个日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48304927/

相关文章:

python - eclipse+pydev 如何重命名模块?

python - 使用 loc 方法获取 DataFrame 的 View

python - Pandas 读取带有 NaN 条目的嵌套 json

Java Date 构造函数意外行为

php - 基于下拉选择的SQL查询

Java 8 将日期输出为 YYYY-MM-DD

python - 如何禁用 jupyter notebook 历史记录

python - Tkinter 格式化为小数点后两位

python - 需要检查一个数据帧是否是另一个数据帧的子集

python - For循环跳过大部分数据集