我正在尝试在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")
答案 0 :(得分:0)
我认为您的apply函数有些问题。您将其传递给DataFrame的每一行,但返回一个Series而不是一个标量。另外,在此处使用空字符串""
可能不是最佳做法。考虑使用NaT(日期时间的空类型)。
好消息是,我认为无需使用列表理解和条件表达式的自定义功能就可以实现这一目标!
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语句更改为scaler。该函数将为每行获取一个Series,因此您可以使用列名引用各个值,并为每行返回一个标量。例如:
def Age(row):
Res = row.Resolved
if pd.isnull(Res):
return (row.Today - row.Created)
else:
return (row.Resolved - row.Created)
编辑:删除了有关缩进的最后一行的注释;主持人修正了错字。