Python Panda if关于日期减法的声明(年龄)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Panda if关于日期减法的声明(年龄)相关的知识,希望对你有一定的参考价值。

我正试图在Python pandas公式中实现这一点。我想要一个新的列,称为“年龄”,如果已解决为空,则执行今天创建的,否则为已创建的。

Excel:

=IF(AA2="",(Piv!$E$1-X2),AA2-X2)

熊猫尝试:

df["Today"] = "2020-06-09"
df["Today"] = pd.to_datetime(df["Today"])

def Age(row):        
    Resolved = row[19]
    if Resolved == "":
        return (df["Today"] - df["Created"])
    else:
        return (df["Resolved"] - df["Created"])

df["Age"] = df.apply(Age, axis="columns")
答案

我认为您的apply函数有些问题。您将其传递给DataFrame的每一行,但返回一个Series而不是一个标量。另外,在此处使用空字符串""可能不是最佳做法。考虑使用NaT(日期时间的空类型)。

好消息是,我认为您可以通过将list comprehensionconditional expression结合使用而无需自定义功能来实现此目的!

df['Age'] = [df.Resolved[i] - df.Created[i] if df.Resolved[i] != '' 
             else df.Today[i] - df.Created[i]
             for i in range(0,df.shape[0])]

如果您要坚持使用自定义函数和apply方法,请尝试将return语句更改为定标器。该函数将为每行获取一个Series,因此您可以使用列名引用各个值,并为每行返回一个标量。例如:

def Age(row):
    Resolved = row.Today
    if Resolved == "":
        return (row.Today - row.Created)
    else:
        return (row.Resolved - row.Created)

编辑:删除了有关缩进最后一行的注释;主持人修正了错字。

以上是关于Python Panda if关于日期减法的声明(年龄)的主要内容,如果未能解决你的问题,请参考以下文章

python 日期的减法

python中时间的减法问题

使用 python panda 模块附加到 sql 表

试图在 Panda DataFrame 中将感知本地日期时间转换为天真的本地日期时间

为多索引 Panda 数据框创建基于另一列的新列

Js日期加减(天数),时间加减,日期运算,可直接调用