Python 每次datetime行重复自身时,向该行添加一年
大家早上好。假设我有以下数据帧:Python 每次datetime行重复自身时,向该行添加一年,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,大家早上好。假设我有以下数据帧: df_array = {"date":["2016/11/4", "2016/11/4", "2016/11/4" , "2014/3/2", "2015/5/6", "2015/5/6"], "id":["1", "1", "1" , "2", "3", "3"]} df = pd.DataFrame(df_array) df["date"] = pd.to_datetime(df["date"]) 哪些产出: | id | date | |--
df_array = {"date":["2016/11/4", "2016/11/4", "2016/11/4" , "2014/3/2", "2015/5/6", "2015/5/6"], "id":["1", "1", "1" , "2", "3", "3"]}
df = pd.DataFrame(df_array)
df["date"] = pd.to_datetime(df["date"])
哪些产出:
| id | date |
|----|-----------|
| 1 | 2016/11/4 |
| 1 | 2016/11/4 |
| 1 | 2016/11/4 |
| 2 | 2014/3/2 |
| 3 | 2015/5/6 |
| 3 | 2015/5/6 |
| id | date | new_date |
|----|-----------|----------|
| 1 | 2016/11/4 | 2016/1/1 |
| 1 | 2016/11/4 | 2016/1/1 |
| 1 | 2016/11/4 | 2016/1/1 |
| 2 | 2014/3/2 | 2014/1/1 |
| 3 | 2015/5/6 | 2015/1/1 |
| 3 | 2015/5/6 | 2015/1/1 |
我想创建一个名为“new_date”的新列,它从每个唯一的行中获取“date”列中的日期,在该年的第一天将其转换,然后在该行每次重复时添加一年,如下所示:
| id | date | new_date |
|----|-----------|----------|
| 1 | 2016/11/4 | 2016/1/1 |
| 1 | 2016/11/4 | 2017/1/1 |
| 1 | 2016/11/4 | 2018/1/1 |
| 2 | 2014/3/2 | 2014/1/1 |
| 3 | 2015/5/6 | 2015/1/1 |
| 3 | 2015/5/6 | 2016/1/1 |
我可以运行类似这样的操作来创建新的_date列并按如下方式填充它:
df["new_date"] = df.drop_duplicates()["date"].dt.year.apply(lambda x: datetime.datetime(x, 1, 1))
哪些产出:
| id | date |
|----|-----------|
| 1 | 2016/11/4 |
| 1 | 2016/11/4 |
| 1 | 2016/11/4 |
| 2 | 2014/3/2 |
| 3 | 2015/5/6 |
| 3 | 2015/5/6 |
| id | date | new_date |
|----|-----------|----------|
| 1 | 2016/11/4 | 2016/1/1 |
| 1 | 2016/11/4 | 2016/1/1 |
| 1 | 2016/11/4 | 2016/1/1 |
| 2 | 2014/3/2 | 2014/1/1 |
| 3 | 2015/5/6 | 2015/1/1 |
| 3 | 2015/5/6 | 2015/1/1 |
但是我不知道如何在每行重复一次时增加日期。有什么建议吗 将每组用于年份计数器、添加到年份和最后转换为日期时间:
y = df['date'].dt.year
df['new_date'] = pd.to_datetime(df.groupby(y).cumcount() + y, format='%Y')
print (df)
date id new_date
0 2016-11-04 1 2016-01-01
1 2016-11-04 1 2017-01-01
2 2016-11-04 1 2018-01-01
3 2014-03-02 2 2014-01-01
4 2015-05-06 3 2015-01-01
5 2015-05-06 3 2016-01-01
或者,您可以指定月份和天数:
y = df['date'].dt.year
df['new_date'] = pd.to_datetime((df.groupby(y).cumcount() + y).astype(str) + '-01-01')