熊猫-存储df.apply()的结果以仅选择行

时间:2018-07-02 06:33:31

标签: python pandas

我有些费解的df.apply()来计算两个日期之间的营业时间。

对于单个行/示例,我没有任何问题,但是我现在尝试将其应用于整个df。

示例代码: df.apply(lambda row: calc_bus_hrs(row['Created Date'], row['T1 - Date']) if not (pd.isnull(row['T1 - Date'])) else np.nan, axis=1)

df.apply与每一行都不相关,并返回一些nan输出,很好

输出:

40171 NaN 40172 NaN 40173 0.399722 40174 NaN 40175 NaN 40176 NaN 40177 NaN 40178 NaN 40179 0.017222 40180 NaN

现在我想使用另一个列值保存到df中,如下所示:

df[df['T1 - From'].values[0] + " Time"]

现在的问题是,当df[df['T1 - From'].values[0]包含nan时,上述代码将失败。

  • 如何将输出仅保存到不是nan的行?

完整代码:

df[df['T1 - From'].values[0] + " Time"] = df.apply(lambda row: calc_bus_hrs(row['Created Date'], row['T1 - Date']) if not (pd.isnull(row['T1 - Date'])) else np.nan, axis=1)

错误:

TypeError: unsupported operand type(s) for +: 'float' and 'str'

1 个答案:

答案 0 :(得分:1)

您可以通过定义一个单独的可以处理行逻辑的lambda函数来实现:

def lambda_func(row):
    if df['T1 - Date'] is not None:
        return calc_bus_hrs(row['Created Date'], row['T1 - Date'])
    else:
        return nan

df[df['T1 - From'].values[0] + " Time"] = df.apply(lambda_func(x))