csv 如何将同一 Dataframe 中的一行与具有相似值的另一行进行比较,并将值设置为新列

k2arahey  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(130)

我有一个csv数据集,如下所示
访视ID|访视日期|识别号|诊断|小组|总成至SP|
1.零零一|2021年1月1日|千零一|牛皮癣|面板总成

  1. 002|二○二一年二月一日|小行星1002|背痛、关节痛|面板总成
    1.零零三|二○二一年二月一日|1003|发热|面板总成
  2. 004| 2021年4月1日|千零一|牛皮癣|样本组SP
  3. 005| 2021年8月1日|1004年|接缝漆|面板总成
    1.零零六|2021年9月1日|小行星1005|接缝漆|面板总成
  4. 007| 2021年10月1日|小行星1002|背痛|样本组SP
    我需要为SP分配一个新值GP,表示从普通诊所到Maven的随访。首先,我将按ID号和日期对数据集进行排序。然后,我如何将每行与具有相同ID号的其他行进行比较,以便我可以确定是否有任何行具有相同的诊断(Maven),是哪一行的前一行(ID相同,但访视日期更早,小组GP)
  • 编辑

定义GP至SP(g):return((g ['诊断'] == g ['诊断'].shift())&(g ['面板'] == '面板SP')&(g ['面板'].shift()== '面板GP'))
newdf = df.赋值(gp_to_sp=df.分组依据(“散列NRIC”).应用(gp_to_sp).删除级别(0))
此代码正常工作,但使用此代码时,ID为(1002)的患者的GP至SP将为假,尽管它应该为真,因为诊断不完全匹配,因为他仅因GP中的一种诊断(背痛)而访问SP。
另外,是否可以分配新的GP_referral列,记录导致GP_to_SP True条件的访视ID?例如,第4行将具有GP_referral值(001)

8fq7wneg

8fq7wneg1#

编辑修改后的问题现在每行可能有多个诊断。在这种情况下,我们希望在此列的第一个explode()。此外,要求初始Visit ID。因此,我们可以简化,当没有转诊时,只有referral_id,即NaN,或当转诊为“GP to SP”时,只有初始就诊ID。

让我们从一个可重现的示例开始:

df = pd.DataFrame({
    'Visit ID': [1, 2, 3, 4, 5, 6, 7],
    'Visit Date': ['2021-01-01', '2021-02-01', '2021-02-01', '2021-04-01',
                   '2021-08-01', '2021-09-01', '2021-10-01'],
    'ID Number': [1001, 1002, 1003, 1001, 1004, 1005, 1002],
    'Diagnosis': ['Psoriasis', 'Back Pain, Joint Pain', 'Fever', 'Psoriasis',
                  'Joint Paint', 'Joint Paint', 'Back Pain'],
    'Panel': ['Panel GP', 'Panel GP', 'Panel GP', 'Panel SP',
              'Panel GP', 'Panel GP', 'Panel SP']})
df['Visit Date'] = pd.to_datetime(df['Visit Date'])

现在:

def referral_id(g):
    p = g['Panel']
    isref = (p == 'Panel GP').shift() & (p == 'Panel SP')
    return g['Visit ID'].shift().loc[isref]

z = df.assign(
    Diagnosis=df['Diagnosis'].str.split(r'\s*,\s*', regex=True)
).explode('Diagnosis').sort_values('Visit Date')

dfnew = df.assign(referral_id=z.groupby(['ID Number', 'Diagnosis'], as_index=False, group_keys=False).apply(referral_id))

>>> dfnew
   Visit ID Visit Date  ID Number Diagnosis              Panel      referral_id
0  1        2021-01-01  1001                   Psoriasis  Panel GP  NaN        
1  2        2021-02-01  1002       Back Pain, Joint Pain  Panel GP  NaN        
2  3        2021-02-01  1003                       Fever  Panel GP  NaN        
3  4        2021-04-01  1001                   Psoriasis  Panel SP  1.0        
4  5        2021-08-01  1004                 Joint Paint  Panel GP  NaN        
5  6        2021-09-01  1005                 Joint Paint  Panel GP  NaN        
6  7        2021-10-01  1002                   Back Pain  Panel SP  2.0

相关问题