Python基于另一列创建新列

2024-10-01 13:40:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框测向下降它有两个日期列连接日期终止日期。 我想得到终止日期和加入日期之间的差值(以天为单位)。但是在终止日期“Not terminated”中有一个文本值。 因此,我试图把它转换成今天的日期,然后得到差异。下面是我尝试转换的代码

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\u Terminated”行,但是对于日期值,它给出了整个df\u drop['TerminatedDate']列,而不是现有的日期(代码的其他部分)。
如何更改它,使其选择相同的原始数据并给出现有的日期值?你知道吗

也有简单的方法来获得差异,而无需单独计算df\u drop['TerminatedDate\u new']

enter image description here


Tags: 数据代码文本dfnewtodaytimenot
1条回答
网友
1楼 · 发布于 2024-10-01 13:40:40

你的代码有点长。更好的方法是

df['TerminatedDate'].replace({'Not_Terminated':today}, inplace=True)

如果不想替换旧列,可以将其保存到新列。你知道吗

df['new_col'] = df['TerminatedDate'].replace({'Not_Terminated':today})

代码的问题是这部分else df_drop['TerminatedDate'] for x,因为它用整列替换了a单元格。它应该是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)

相关问题 更多 >