python - 根据其他列中的条件和比较添加列
问题描述
我正在使用 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 并且开始日期 > 结束日期。
任何人都可以建议一段代码吗?
解决方案
使用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
推荐阅读
- python - 传递全局作为参考
- flutter - 是否有任何解决方案可以解决此错误尝试调用:findAncestorStateOfType
()? - high-availability - Artemis 通过队列联合和 HA 复制策略实现负载平衡
- mongodb - 根据主文档中的值仅从子文档中检索某些字段
- for-loop - 飞镖如何在 if 中打破 forEach
- c# - 如何从 ajax 读取传入的 Json 字符串并将其映射到 C# asp.ne MVC 控制器
- ios - 带有嵌入式 CollectionView 的 TableView
- visual-studio-code - VS 代码自动格式化会弄乱换行符和指针声明
- python-3.x - 将 pandas 的化学式列转换为 SMILES
- javascript - 如何在Javascript中的多个aysnc请求后做某事