首页 > 解决方案 > 在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?

非常感谢,

桑德拉

标签: pythonpandas

解决方案


您可以使用np.where,如果条件为 ,则赋值为 1 ,如果为 ,则为True0 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

推荐阅读