利用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)

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

### 回答1: 这个问题十分合理,可以使用 Pandas 中的 drop_duplicates 函数,将 DataFrame 按照 positionId 去重,保留第一次出现的重复。可以这样实现: ```python df.drop_duplicates(subset='positionId', keep='first', inplace=True) ``` 其中,subset 参数指定按照哪一列去重,keep 参数指定保留哪一个重复(这里是第一次出现的),inplace 参数指定是否修改原 DataFrame。 ### 回答2: 在处理positionId的重复时,我们可以按照positionId去重并保留第一次出现的重复。以下是一种处理方法: 首先,对数据排序,以便相同的positionId在一起。 然后,创建一个空的数据选择器(selection)表,用于存储第一次出现positionId索引。 接下来,遍历排序后的数据,当处理到每一时,检查该的positionId是否已经在选择器表中。 如果不在选择器表中,将该的索引添加到选择器表中,并继续遍历下一。 如果已经在选择器表中,则跳过该,不做任何操作。 完成遍历后,选择器表中存储的索引即为保留的第一次出现重复的索引。 最后,根据选择器表的索引,重新提取原始数据中的对应,即可得到处理后的数据,去除了positionId的重复,并保留了第一次出现的重复。 以上是一种简单有效的处理方法,可以帮助我们处理positionId的重复。 ### 回答3: 要处理positionId的重复,可以按照positionId一列去重,只保留第一次出现的重复。 首先,我们可以利用pandas库来处理这个问题。可以使用pandas的drop_duplicates()方法对positionId去重操作。这个方法能够删除指定中的重复,只保留第一次出现的重复。 具体操作如下: 1. 首先,导入pandas库。 ```python import pandas as pd ``` 2. 读取包含positionId数据集,并将其存储为一个DataFrame对象。 ```python data = pd.read_csv('data.csv') ``` 3. 使用drop_duplicates()方法对positionId去重操作,并将结果重新赋给原DataFrame对象。 ```python data = data.drop_duplicates(subset=['positionId']) ``` 4. 最后,将去重后的DataFrame对象进保存,或者进其他需要的操作。 ```python data.to_csv('clean_data.csv', index=False) ``` 通过以上步骤,我们可以实现对positionId的去重操作,并且只保留第一次出现的重复。最终的结果将保存为clean_data.csv文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值