我有一个pandas数据框 df.drop ,它有两个日期列加入日期和终止日期 。 我希望得到终止日期和加入日期之间的差异(以天为单位)。但是终止日期中有一个文本值'未终止'。 因此我试图将它转换为今天的日期然后得到差异。下面是我尝试转换的代码
import time
today=time.strftime(("%Y-%m-%d"))
df_drop['TerminatedDate_new'] = [today if x=='Not_Terminated' else df_drop['TerminatedDate'] for x in df_drop['TerminatedDate']]
虽然它给出了'Not_Terminated'行的正确答案(今天),但对于日期值,它给出了整个df_drop ['TerminatedDate']列而不是现有日期(否则是代码的一部分)。
如何更改它以便选择相同的原始值并给出现有的日期值?
还有一种简单的方法可以在不分别计算df_drop的情况下获得差异['TerminatedDate_new']
答案 0 :(得分:1)
你的代码有点长。更好的方法是
df['TerminatedDate'].replace({'Not_Terminated':today}, inplace=True)
如果您不想替换旧列,可以将其保存到新列。
df['new_col'] = df['TerminatedDate'].replace({'Not_Terminated':today})
您的代码存在的问题是此部分else df_drop['TerminatedDate'] for x
,因为它将整个列替换为单元格。它应该是else x for x
。
如果您希望在单个操作中获得差异,则必须创建自定义函数并按行方式应用。
def get_dif(start,end):
if end == "Not_Terminated":
end = today
return end-start
df['new_col'] = df.apply(lambda df: get_dif(df['JoinedDate'],df['TerminatedDate'], axis=1)