python - 在python中将多个整数变量重新编码为一个
问题描述
每条记录代表一个人。250.000 是糖尿病,如果 250 出现在 Code1、Code2 或 Code3 中的任何一个中,我想创建一个 DXDiabetes 列。
import pandas as pd
data_prep = pd.DataFrame({"Code1" : [250.000,276.000,401.000,414.000],
"Code2" : [403.000,411.000,414.000,250.000],
"Code3" : [427.000,250.000,486.000,682.000]})
data_prep
但是,当我移至 Code3 时,我不会保留 Code1 中的“1”编码。DXDiabetes 只保留最后一次重新编码。
data_prep['DXDiabetes']=data_prep['Code1'].apply(lambda x: 1 if round(x,0) == 250 else 0)
data_prep['DXDiabetes']=data_prep['Code2'].apply(lambda x: 1 if round(x,0) == 250 else None)
data_prep['DXDiabetes']=data_prep['Code3'].apply(lambda x: 1 if round(x,0) == 250 else None)
print(data_prep['DXDiabetes'].value_counts())
如果 Code1、Code2 或 Code3 中的任何一个 == 250,有没有办法让 DXDiabetes = 1?
非常感谢,
桑德拉
解决方案
您可以使用np.where
,如果条件为 ,则赋值为 1 ,如果为 ,则为True
0 False
。该条件检查三列的任何行是否等于 250。
import numpy as np
data_prep['DXDiabetes'] = np.where(
data_prep[['Code1', 'Code2', 'Code3']].eq(250).any(axis=1), 1, 0)
>>> data_prep
Code1 Code2 Code3 DXDiabetes
0 250.0 403.0 427.0 1
1 276.0 411.0 250.0 1
2 401.0 414.0 486.0 0
3 414.0 250.0 682.0 1
请注意,您首先检查是否相等:
>>>> data_prep[['Code1', 'Code2', 'Code3']].eq(250)
Code1 Code2 Code3
0 True False False
1 False False True
2 False False False
3 False True False
然后你检查上面是否有任何行是True
通过指定.any(axis=1)
.
>>> data_prep[['Code1', 'Code2', 'Code3']].eq(250).any(axis=1)
0 True
1 True
2 False
3 True
dtype: bool
推荐阅读
- arrays - 由日文、ruby、yml、php 中的代码数组唯一键入的国家/地区调用代码
- php - 根据用户输入mysql列出特定月份的所有天
- c++ - C++ 中混合二进制/文本日志记录的最佳实践
- c# - DateTime.Parse 的 FormatException。检查我的日期字符串中的哪个部分有误
- mercurial - 推送后如何自动将远程 mercurial 存储库保持在提示状态
- sql-server - SQL 在 where 子句中使用 CASE
- node.js - MERN 堆栈,REST api Postman,无法获取 /
- android - 如何在 Activity 及其父级中添加 DI (Dagger 2)
- ms-access - 从启动时以低优先级模式运行 Access
- firebase - 具有分析和用户属性的 Firebase 云消息