我有些费解的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
时,上述代码将失败。
完整代码:
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'
答案 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))