如果另一列的值不匹配,则创建一个新的值输出



我正在处理一些复杂的患者健康数据,希望简化对患者使用的保险类型的分类。然而,一些患者使用多种保险类型来支付医疗费用(即医疗保险和补充保险)。我已经将保险分类为私人保险或公共保险,现在我想对患者是否使用多种保险类型进行分类。

我当前的数据集如下所示:

import pandas as pd
data = {'patient_ID': [1,1,1,2,2,3,3,3,4,4,4,4],
'Public_Private': ['Public', 'Public', 'Public',
'Private', 'Public','Private', 'Private', 
'Private', 'Private', 'Public', 'Private', 
'Public']}
df = pd.DataFrame(data)
df
tbody> <<tr>1222
patient_IDPublic_Private
1公共
私人
私人
私人
私人

您可以按患者id分组,从组中选择public_private列,然后应用转换,您可以将其填充回新列中组的原始行。

import pandas as pd

data = {
'patient_ID': [1, 1, 2, 2, 3, 3],
'Public_Private': ['Public', 'Private',
'Private', 'Private',
'Public', 'Public'],
'Other_info': [1.1, 1.2,
2.1, 2.2,
3.1, 3.2]
}

df = pd.DataFrame(data)
print(df)
# patient_ID Public_Private  Other_info
#          1         Public         1.1
#          1        Private         1.2
#          2        Private         2.1
#          2        Private         2.2
#          3         Public         3.1
#          3         Public         3.2

def simple(g_arr: pd.Series):
#  ex. g_arr = ['Private', 'Public'] or ['Public', 'Public'], etc.
if len(set(g_arr)) == 1:
return g_arr.iloc[0]
return 'Mixed'

df['Simple'] = df.groupby('patient_ID')['Public_Private'].transform(simple)
print(df)
# patient_ID Public_Private  Other_info   Simple
#          1         Public         1.1    Mixed
#          1        Private         1.2    Mixed
#          2        Private         2.1  Private
#          2        Private         2.2  Private
#          3         Public         3.1   Public
#          3         Public         3.2   Public