首页 > 解决方案 > 根据其他列中的条件和比较添加列

问题描述

我正在使用 pandas 根据现有列中值的条件和比较在数据框中添加其他列。

这是原始数据框:

        start         end Sold
0                           NA
1  2017-05-08  2017-09-08  Yes
2  2018-09-01  2017-09-01  Yes

这是我想要的数据框:

        start         end Sold    valid
0                           NA  Unknown
1  2017-05-08  2017-09-08  Yes     True
2  2018-09-01  2017-09-01  Yes    False

基本上,新列有效由所有 3 个现有列定义。

Condition 1: 如果已售出为 NA,则有效等于未知。

Condition 2: 如果已售出不 NA,开始日期 < 结束日期,有效等于 True。并且有效等于 False 被出售不是 NA 并且开始日期 > 结束日期。

任何人都可以建议一段代码吗?

标签: pythonpandas

解决方案


使用numpy.select

#convert to datetimes both columns
df['start'] = pd.to_datetime(df['start'], errors='coerce')
df['end'] = pd.to_datetime(df['end'], errors='coerce')

df['valid'] = np.select([df['Sold'] == 'NA', 
                        df['start'] < df['end'], 
                        df['start'] > df['end']], ['Unknown', True, False])

如果Na是缺失值NaN测试值Series.isna

df['valid'] = np.select([df['Sold'].isna(), 
                        df['start'] < df['end'], 
                        df['start'] > df['end']], ['Unknown', True, False])

print (df)
       start        end Sold    valid
0        NaT        NaT   NA  Unknown
1 2017-05-08 2017-09-08  Yes     True
2 2018-09-01 2017-09-01  Yes    False

推荐阅读