I have a dataframe like so:
df
Id Severity First Discovered
0 Low 1/1/2021
1 Medium 1/1/2021
2 Medium 1/1/2021
I've also defined a function below that assists in creating "Target Close Date" which adds a certain number of days to the "First Discovered" field depending on what the corresponding "Severity" value is.
def get_target_close_date(severity, first_discovered_date):
'''Adds days to first discovered date depending on severity'''
if severity == 'Low':
target_close_date = first_discovered_date + timedelta(days=30)
elif severity == 'Medium':
target_close_date = first_discovered_date + timedelta(days=60)
return target_close_date
By executing df['Target Close Date'] = df.apply(lambda row: get_target_close_date(row['Severity'], row['First Discovered']), axis=1)
, the dataframe updates correctly:
df
Id Severity First Discovered Target Close Date
0 Low 1/1/2021 1/31/2021
1 Medium 1/1/2021 3/2/2021
2 Medium 1/1/2021 3/2/2021
However, if the dataframe is empty, the code does not work, and I get a ValueError: Wrong number of items passed 3, placement implies 1. I ideally want to add an if else statement to the lambda function to check if dataframe is empty, something like:
df['Target Close Date'] = df.apply(
lambda row: get_target_close_date(row['Severity'], row['First Discovered']) if not df.empty else pass,
axis=1)
This keeps returning a syntax error however. I would prefer to write the if else conditional inside the lambda function rather than doing an if else statement that spans across multiple lines.