我想向pandas df添加一个新列,该列将基于另一列进行计算。 这是df的快捷键:
如果日期在start_date1
和end_date1
之间,则应在期间列“ 0”中输出。如果日期在start_date2
和end_date2
之间,则输出“ 1”,依此类推。
有没有办法做到这一点而没有循环?
感谢您的帮助:)
拉里
答案 0 :(得分:0)
首先,您需要检查列date
的格式是否为datetime
。
您可以使用df.dtypes
进行检查。如果它没有日期格式(datetime64
),则必须使用以下命令将其转换为日期时间:
df['date'] = pd.to_datetime(df.date, format='%Y%m%d', errors='ignore')
请注意,参数errors='ignore'
具有风险,因此是可选参数。
现在要创建计算字段,您可以执行以下操作:
# define function to calculate periods based on date
def calculate_period(row):
if row['date'] > start_date1 & row['date'] < end_date1:
return "0"
elif row['date'] > start_date2 & row['date'] < end_date2:
return "1"
elif row['date'] > start_date3 & row['date'] < end_date3:
return "2"
else:
return "unknown"
# apply function to create the new column
df['period'] = df.apply(calculate_period, axis=1)
如果需要更多period
值,则可以根据需要扩展elif
语句。
由于缺少有关您的数据的信息。我假设start_date1
和end_date1
是您定义的变量。
如果这些也是列。该函数将如下所示:
# define function to calculate periods based on date
def calculate_period(row):
if row['date'] > row['start_date1'] & row['date'] < row['end_date1']:
return "0"
elif row['date'] > row['start_date2'] & row['date'] < row['end_date2']:
return "1"
elif row['date'] > row['start_date3'] & row['date'] < row['end_date3']:
return "2"
else:
return "unknown"
# apply function to create the new column
df['period'] = df.apply(calculate_period, axis=1)
祝你好运。