如何根据另一列有条件地添加具有新日期时间的新列

塞巴斯蒂安·克莱弗

我有一个数据框如下

datadf = {'Date':  ['2010-03-15', '2014-03-21','2019-02-26','2017-02-26'],
        'Follow': ['3 years', '5 years','3 years','1 year']
        }

df = pd.DataFrame (datadf) 

我想创建一个新列,如果 Follow= 3 年,则在新列中的日期列中的日期中添加 3 年。如果是 5 年,则同样适用,然后再加上 5 年,依此类推。

我可以针对单个条件执行此操作,如下所示:

df["DateUpdate"] = df.apply(lambda x: x['Date'] + pd.offsets.DateOffset(years=53) 
                            if '3 years' in x['Follow'] else x['Date'],
                            axis=1)

但是如何扩展所有条件?

穆吉加

假设Follow是格式n yearsn year

df = pd.DataFrame({'Date':  ['2010-03-15', '2014-03-21','2019-02-26','2017-02-26'],
        'Follow': ['3 years', '5 years','3 years','1 year']
        })

df['Date'] = pd.to_datetime(df['Date'])
df['DateUpdate'] = df.apply(lambda r: 
                            r['Date']+pd.offsets.DateOffset(
                                years=float(r["Follow"].split()[0])), axis=1)
print (df)

输出:

Date    Follow  DateUpdate
0   2010-03-15  3 years 2013-03-15
1   2014-03-21  5 years 2019-03-21
2   2019-02-26  3 years 2022-02-26
3   2017-02-26  1 year  2018-02-26

更新 1:

归纳其工作确定所有offsets受支持的DateOffset,但假设的格式Follown offsetstringNot available

def do_offset(row):
    date, follow = row['Date'], row['Follow']
    allowed_offsets = [ "years", "months", "weeks", "days", 
                       "hours", "minutes", "seconds", "microseconds"]
    if follow != "Not available":
        n, offset = follow.lower().split()
        # For year, month, ...        
        offset = offset+"s" if offset[-1] != "s"  else offset 
        if offset in allowed_offsets:
            date = date+pd.offsets.DateOffset(**{offset:float(n)})
    return date


df = pd.DataFrame({'Date':  ['2010-03-15']*10,
        'Follow': ['1 year', '3 years', '3 months', '3 weeks', 
                   '3 days', '3 hours', '3 minutes', '3 seconds', 
                   '3 microseconds', 'Not available']
        })

df['Date'] = pd.to_datetime(df['Date'])
df['DateUpdate'] = df.apply(do_offset, axis=1)

print (df)

输出:

        Date          Follow                 DateUpdate
0 2010-03-15          1 year 2011-03-15 00:00:00.000000
1 2010-03-15         3 years 2013-03-15 00:00:00.000000
2 2010-03-15        3 months 2010-06-15 00:00:00.000000
3 2010-03-15         3 weeks 2010-04-05 00:00:00.000000
4 2010-03-15          3 days 2010-03-18 00:00:00.000000
5 2010-03-15         3 hours 2010-03-15 03:00:00.000000
6 2010-03-15       3 minutes 2010-03-15 00:03:00.000000
7 2010-03-15       3 seconds 2010-03-15 00:00:03.000000
8 2010-03-15  3 microseconds 2010-03-15 00:00:00.000003
9 2010-03-15   Not available 2010-03-15 00:00:00.000000

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据另一列有条件地格式化 Excel?

如何对另一列有条件的列求和?

dplyr:根据另一列的条件有条件地对列进行排名?

如何根据前几列有条件地设置空列值

如何有条件地聚合基于另一列的列

根据另一列中的值有条件地计算一列的递归

如何使用另一列中的值有条件地更改DF值

如何有条件地在电子表格上添加一列?

导入多个csv时如何有条件地添加一列

如何有条件地将一列填充到列表中另一列中的值?

如何从具有条件的另一列中提取值?

根据另一列中的数据有条件地从不同列中选择数据

根据使用另一列的正则表达式提取的内容,有条件地在spark数据框中填充新列

根据另一列的行值有条件地返回一些行值的向量

根据另一列的值根据条件添加具有值的新列

使用 VBA 根据另一列的值有条件地插入值时遇到问题

根据Pyspark中另一列的值,有条件地从同一列的另一行值替换一行中的值?

有条件地用另一列的值替换列的值perl

AWK交换列并有条件地替换另一列

如何使用带有条件的另一列的值更新一列?

根据R中一列中的连续值有条件地插入行

如何基于其他两个列有条件地制作新的熊猫DF列

有条件地添加列

有条件地向 Pandas 数据框添加一列

有条件时添加唯一列

如何根据熊猫另一列中的条件生成具有值的新列

有条件地将值从一列复制到另一列

有条件地将一列的内容复制到另一列

按一列分组并有条件地计数另一列-MySQL