计算元素时如何在熊猫数据框中添加新列?

时间:2018-12-31 12:16:14

标签: python pandas dataframe calculated-columns

我想向pandas df添加一个新列,该列将基于另一列进行计算。 这是df的快捷键:

shortcut of df

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

有没有办法做到这一点而没有循环?

感谢您的帮助:)

拉里

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_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)

祝你好运。