Python 如何在熊猫的当前日期列中添加3年以上的日期
我在熊猫中有以下数据帧Python 如何在熊猫的当前日期列中添加3年以上的日期,python,pandas,Python,Pandas,我在熊猫中有以下数据帧 code fat_version bat_version from_date to_date 102 1.7 2.5 2019-01-02 2019-04-16 102 3.5 7.1.5 2019-04-16 2020-04-16 347 6.55 6.55 2019-06-04 2020-04-16 107 6.55
code fat_version bat_version from_date to_date
102 1.7 2.5 2019-01-02 2019-04-16
102 3.5 7.1.5 2019-04-16 2020-04-16
347 6.55 6.55 2019-06-04 2020-04-16
107 6.55 6.55 2019-01-18 2019-04-05
107 6.55 6.55 2019-04-05 2020-04-16
我想做的是将大于3年的日期添加到最短的起始日期,并根据代码级别将相应的fat\u变量
和bat\u版本
作为nan
分组。我想要的数据帧如下
code fat_version bat_version from_date to_date
102 nan nan 2016-01-02 2019-01-01
102 1.7 2.5 2019-01-02 2019-04-16
102 3.5 7.1.5 2019-04-16 2020-04-16
347 nan nan 2016-06-04 2019-06-03
347 6.55 6.55 2019-06-04 2020-04-16
107 nan nan 2016-01-18 2019-01-17
107 6.55 6.55 2019-01-18 2019-04-05
107 6.55 6.55 2019-04-05 2020-04-16
如何在Pandas中执行此操作?通过获取每组的第一行,使用“添加3年到”更改中的值,然后加入到原始和排序:
df['from_date'] = pd.to_datetime(df['from_date'])
df['to_date'] = pd.to_datetime(df['to_date'])
df1 = (df.drop_duplicates('code')
.assign(to_date = lambda x: x['from_date'],
from_date = lambda x: x['from_date'] - pd.offsets.DateOffset(years=3),
fat_version = np.nan,
bat_version = np.nan))
print (df1)
code fat_version bat_version from_date to_date
0 102 NaN NaN 2016-01-02 2019-01-02
2 347 NaN NaN 2016-06-04 2019-06-04
3 107 NaN NaN 2016-01-18 2019-01-18
df = pd.concat([df1, df], ignore_index=True).sort_values('code')
print (df)
code fat_version bat_version from_date to_date
0 102 NaN NaN 2016-01-02 2019-01-02
3 102 1.70 2.5 2019-01-02 2019-04-16
4 102 3.50 7.1.5 2019-04-16 2020-04-16
2 107 NaN NaN 2016-01-18 2019-01-18
6 107 6.55 6.55 2019-01-18 2019-04-05
7 107 6.55 6.55 2019-04-05 2020-04-16
1 347 NaN NaN 2016-06-04 2019-06-04
5 347 6.55 6.55 2019-06-04 2020-04-16
有什么问题?超过三年的日期(即,您没有年轻的问题)?还是nan?谢谢你一如既往的回答。起始日期应早于正确映射的3年,但在截止日期中,它应与下一个
起始日期
相同。请检查我想要的数据框。@Neil-我在分配中更改了顺序,现在应该是正确的。在映射3年以上的日期时,我们能再做一次更改吗。所以我们可以用t-1日期代替相同的日期。我正在更新我想要的dataframe@Neil-您可以测试更改的assign
像.assign(to_date=lambda x:x['from_date']-pd.offset.DateOffset(days=1),from_date=lambda x:x['from_date']-pd.offset.DateOffset(years=3)+pd.offset.DateOffset(days=1)吗,fat_version=np.nan,bat_version=np.nan))
?