Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 每次datetime行重复自身时,向该行添加一年_Python_Pandas_Dataframe_Datetime - Fatal编程技术网

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')