如何基于现有列在Python中创建新列

时间:2019-05-10 18:37:35

标签: python pandas

响应:

Response

我需要基于现有的“时间”列创建“响应”列。我的响应变量必须在1s到60s和240s到300s的时间值中显示“否”。并对所有剩余值显示“是”。

我尝试了下面的代码,但是无论给定条件如何,它仅对所有“时间”值显示“否”。

数据集:

Dataset

dataset['Y'] = np.where(dataset["Time"] > 60 & (dataset["Time"] < 240 ), 'yes', 'no')

2 个答案:

答案 0 :(得分:0)

def label(row):
    if row['Time'] >= 1 and row['Time'] < 60:
        return("no")
    elif row['Time'] >= 240 and row['Time'] < 300:
        return("no")
    else:
        return("yes")

dataset['Y'] = dataset.apply(lambda row: label(row), axis=1)

在您的代码中,您的条件错误,因此无法正常工作。

答案 1 :(得分:0)

我倾向于做以下事情:

dataset['Y'] = (dataset['Time'] >= 1) & (dataset['Time'] <= 4) | (dataset['Time'] > 5)

请注意,这会将布尔值填充到“ Y”列。如果最重要的是它们是/否,则可以将其更改为

dataset['Y'] = ((dataset['Time'] >= 1) & (dataset['Time'] <= 4) | (dataset['Time'] > 5)).replace({True: 'Yes', False: 'No'})

还请注意,我没有将时间间隔转换为秒,而是将时间间隔转换为分钟,但是出于可读性考虑,您可能希望这样做有所不同。