Python Pandas基于另一列的新列

时间:2017-11-24 17:18:25

标签: python pandas

我有一个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']

enter image description here

1 个答案:

答案 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)