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 comprehension与conditional 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关于日期减法的声明(年龄)的主要内容,如果未能解决你的问题,请参考以下文章