python - Pandas:根据多列条件创建新列
问题描述
我有以下数据集:
ID AAA BBB CCC DDD
1234 {'2015-01-01': 1} {'2016-01-01': 1, {'2015-01-02': 1} {'2016-01-02': 1}
'2016-02-15': 2}
1235 {'2017-11-05': 1, {'2018-01-05': 1} NaN {'2017-01-06': 1}
'2018-06-05': 1}
在单元格中,“key”是某人住院的日期,“value”是天数。
我需要为住院创建一个新列(“是”或“否”)。
“是”的条件:
- [AAA 或 BBB] 列和 [CCC 或 DDD] 列都应填写日期。
- [CCC 或 DDD] 栏中的日期应为 [AAA 或 BBB] 栏中日期的第二天。
例如,如果 [AAA 或 BBB] 的日期为 2020 年 1 月 1 日。如果选择“是”,则 [CCC 或 DDD] 中的日期应为 2020 年 1 月 2 日。
期望的输出:
ID AAA BBB CCC DDD Hospitalized
1234 {'2015-01-01': 1} {'2016-01-01': 1, {'2015-01-02': 1} {'2016-01-02': 1} Yes
'2016-02-15': 2}
1235 {'2017-11-05': 1, {'2018-01-05': 1} NaN NaN No
'2018-06-05': 1}
1236 {'2017-11-05': 1, {'2018-01-05': 1} NaN {'2018-01-06': 1} Yes
'2018-06-05': 1}
我尝试了以下代码,但这会捕获日期是否存在但不捕获时间戳。
df['hospitalized'] = (df
.apply(lambda r: 'yes' if (1 if pd.notna(r.loc[['AAA', 'BBB']]).any() else 0) +
(1 if pd.notna(r.loc[['CCC', 'DDD']]).any() else 0) > 1
else 'no', axis=1))
任何建议,将不胜感激。谢谢!
解决方案
东风:
df = pd.DataFrame([[1234, {'2015-01-01': 1}, {'2016-01-01': 1, '2016-02-15': 2}, {'2015-01-02': 1}, {'2016-01-02': 1}], [1235, {'2017-11-05': 1,'2018-06-05': 1}, {'2018-01-05': 1}, np.nan, np.nan]], columns= ['ID', 'AAA', 'BBB', 'CCC', 'DDD'])
尝试:
import itertools
from dateutil import parser
import datetime
def func(x):
A_B_dates = list(map(parser.parse,list(itertools.chain(*[x['AAA'].keys()] + [x['BBB'].keys()]))))
C_D_dates = list(map(parser.parse,list(itertools.chain(*[x['CCC'].keys()] + [x['DDD'].keys()]))))
for date1 in A_B_dates:
if date1+datetime.timedelta(days=1) in C_D_dates:
return 'yes'
return 'no'
df = df.where(df.notna(), lambda x: [{}])
df['Hospitalised'] = df.apply(func, axis=1)
东风:
ID AAA BBB CCC DDD Hospitalised
0 1234 {'2015-01-01': 1} {'2016-01-01': 1, '2016-02-15': 2} {'2015-01-02': 1} {'2016-01-02': 1} yes
1 1235 {'2017-11-05': 1, '2018-06-05': 1} {'2018-01-05': 1} {} {'2017-01-06': 1} no
推荐阅读
- java - Kotlin 中的 ByteArray 到 DoubleArray
- curl - 如何为 curl Rust crate 启用 NTLM 支持?
- javascript - Javascript:在画布上绘制图像时,图像大小变为两倍
- javascript - 无法在 Mongodb 中进行正确的查询
- android - 如何根据列表显示带有数字的图像
- python - IP 地址引发 Python 套接字错误
- amazon-web-services - Terraform 错误:错误锁定状态:获取状态锁定错误:发生 2 个错误:
- python - ImportError:虽然我安装了谷歌云视觉,但无法从“google.cloud.vision”导入名称“类型”
- javascript - Jquery自定义选择插件无法使用代码选择选项
- javascript - style.css 不适用于 wordpress 子主题