利用pandas将某一列数据按照ID由列变成行,并在对应的列填值

原文件:

df_org = pd.DataFrame([[807, '其他', 15],
                       [807, '尿常规', 1],
                       [2421, '尿常规', 0],
                       [2421, 'PTH', 300],
                       [878, 'PTH', 312],
                       [878, '血常规', 0.018]],
                      columns=['患者ID', '项目名称', '结果'])

输出:
在这里插入图片描述
需求:将“项目名称”下的数据 ,横向变成列,然后根据“患者ID”,在对应的列填对应的值,没有值的不用填。最终每一行的数据,包含一个“患者ID”的数据。

完整代码:

import pandas as pd

df_org = pd.DataFrame([[807, '其他', 15],
                       [807, '尿常规', 1],
                       [2421, '尿常规', 0],
                       [2421, 'PTH', 300],
                       [878, 'PTH', 312],
                       [878, '血常规', 0.018]],
                      columns=['患者ID', '项目名称', '结果'])

print('原文件:\n', df_org)

df_new = pd.DataFrame(None, columns=('患者ID', *df_org['项目名称'].drop_duplicates()))
df_new['患者ID'] = df_org['患者ID'].drop_duplicates()


def fn(x):
    df_fn = df_org[df_org['患者ID'] == x['患者ID']]  # 取出同一ID的数据
    for i in x.index:
        if i != '患者ID':
            value = df_fn[df_fn['项目名称'] == i]['结果'].values  # 获得对应列的值
            if len(value) > 0:
                x[i] = value[0]  # 将值放入新的表格
    return x


df_new = df_new.apply(lambda x: fn(x), axis=1)  # 取出每一行数据, 通过方法fn(x)进行匹配

print('新文件:\n', df_new)

输出:
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值