Python设置如何筛选所有组合

2024-07-06 23:49:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一名外科医生,我正在查看不止一次垂体瘤手术的患者的数据。 我有384个病人,他们做了806次手术。他们中的大多数人做过2次手术,但有些人做过3次或4次。 两种操作类型的操作代码为B041和B012。 我使用了下面的方法来循环遍历我的数据框中的行,以创建一个索引,该索引只包含至少有两个感兴趣的不同OPs的患者

pit_codes = {'B041', 'B012'}
pit_index = []
for i in df_patients.index:
    """EDIT: filter criterion tightened to at least two different 
       relevant OPs, i.e. the intersection of the implant_codes 
       list with the patient's OP list has at least two elements."""
    if len(pit_codes.intersection(df_patients.OPERTN_01[i])) >= 2: 
        pit_index.append(i)

df_pits = df_patients.filter(pit_index, axis=0)
display(df_pits)

循环的数据帧是一个列出操作的透视表

df_patients = pd.pivot_table(dups_ind, index=dups_ind.index, aggfunc=list)
display(df_patients)

这在一定程度上起到了作用,但由此产生的datframe df_pits只有61名患者,而不是384名患者。 查看操作顺序-

df_pits.OPERTN_01.value_counts()

[B012, B041]                26
[B041, B012]                26
[B041, B012, B041]           4
[B041, B041, B012]           2
[B012, B012, B041, B041]     1
[B012, B041, B041]           1
[B041, B012, B012]           1
Name: OPERTN_01, dtype: int64

似乎将我的集合定义为pit_codes = {'B041', 'B012'}不适用于大多数患者两次接受相同手术的情况,例如B041然后B041,或者B012然后B012。(虽然我还没来得及证明这一点,因为我的技能很低)。 如何创建集合以拾取相同操作重复两次的操作序列


Tags: the数据患者dfindexopscodeslist
1条回答
网友
1楼 · 发布于 2024-07-06 23:49:12

我只是猜测您的数据帧是什么样子,但这里有一些示例

启动数据帧的一些示例

 > import pandas as pd
 > df = pd.DataFrame([{'Patient': 'patient1', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B012'},
     {'Patient': 'patient2', 'Treatement': 'B022'},
     {'Patient': 'patient2', 'Treatement': 'B022'},
     {'Patient': 'patient2', 'Treatement': 'B023'},
     {'Patient': 'patient2', 'Treatement': 'B041'},
     {'Patient': 'patient3', 'Treatement': 'B012'},
     {'Patient': 'patient4', 'Treatement': 'B041'},
     {'Patient': 'patient5', 'Treatement': 'B012'},
     {'Patient': 'patient6', 'Treatement': 'B041'},
     {'Patient': 'patient7', 'Treatement': 'B012'},
     {'Patient': 'patient8', 'Treatement': 'B012'},
     {'Patient': 'patient9', 'Treatement': 'B041'},
     {'Patient': 'patient2', 'Treatement': 'B041'},
     {'Patient': 'patient2', 'Treatement': 'B041'},
     {'Patient': 'patient2', 'Treatement': 'B041'},
     {'Patient': 'patient3', 'Treatement': 'B041'},
     {'Patient': 'patient4', 'Treatement': 'B012'},
     {'Patient': 'patient5', 'Treatement': 'B041'},
     {'Patient': 'patient6', 'Treatement': 'B041'},
     {'Patient': 'patient12', 'Treatement': 'B033'},
     {'Patient': 'patient11', 'Treatement': 'B049'}])

将所有患者和患者分组;他们的治疗:

> df.groupby(['Patient','Treatement']).size()

patient1   B012          1
patient11  B049          1
patient12  B033          1
patient2   B012          6
           B022          2
           B023          1
           B041          4
patient3   B012          1
           B041          1
patient4   B012          1
           B041          1
patient5   B012          1
           B041          1
patient6   B041          2
patient7   B012          1
patient8   B012          1
patient9   B041          1

定义我们感兴趣的治疗方法:

> pit_codes = ['B041', 'B012']
 

将列表应用为过滤器&;为方便起见,启动第二个数据帧(df2)

> df2=df.query('Treatement == @pit_codes')

打印每个患者、每个治疗(和计数)的信息

> df2.groupby(['Patient','Treatement']).size()

Patient   Treatement
patient1  B012          1
patient2  B012          6
          B041          4
patient3  B012          1
          B041          1
patient4  B012          1
          B041          1
patient5  B012          1
          B041          1
patient6  B041          2
patient7  B012          1
patient8  B012          1
patient9  B041          1

我希望这会有所帮助,但在不知道实际数据帧的情况下,这有点棘手

相关问题 更多 >