如何在计算元素时向 pandas 数据框添加新列?

How to add a new column to a pandas dataframe while calculate the elements?

我想向 pandas df 添加一个新列,它将根据另一列进行计算。 这是 df 的快捷方式:

如果日期介于 start_date1end_date1 之间,则应在期间列“0”中输出。如果日期在 start_date2end_date2 之间,则输出“1”,依此类推。

有没有不用循环的方法?

感谢您的帮助:)

拉里

首先,您需要检查您的列 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_date1end_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)

祝你好运。