【问题标题】:Python Pandas New column based on another column基于另一列的 Python Pandas 新列
【发布时间】:2017-11-25 02:30:43
【问题描述】:

我有一个熊猫数据框 df.drop,它有两个日期列 Joined DateTerminated Date . 我想获得终止日期和加入日期之间的差异(以天为单位)。但终止日期中有一个文本值'未终止'。 因此我尝试将其转换为今天的日期,然后得到差异。下面是我尝试转换的代码

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'] 的简单方法来获得差异

【问题讨论】:

    标签: python pandas


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 完整的答案和很好的解释。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 2023-03-25
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多