将值从数据框中的其他列追加到列的最佳方法是什么

问题描述 投票:0回答:1

我从中接收数据的源系统具有奇数结构。我想知道有比我发现的更好的方法来处理它。首先,这是数据的外观:

ID    med_A    med_B    med_C    med_D
AA    cold     flu      nasal    Nan
AA    pain     cold     Nan      Nan
BB    bleed    heart    Nan      Nan
CC    cold     bleed    Nan      Nan

解释,每个ID是唯一的患者,每个患者可能有很多行。单行代表一次去看医生。列med_A,...,med_D是患者接受的不同医学诊断。关于源系统的奇怪之处在于,后面的列在前面的列之后被填充。因此,在单次就诊时,患者的第一个诊断进入med_A,第二个诊断进入med_B,依此类推。

我想将列折叠起来,这样我就拥有:

ID    MED
AA    cold
AA    flu
AA    nasal
AA    pain
AA    cold
BB    bleed
BB    heart
CC    cold
CC    bleed

也请注意额外的复杂性:实际上,这些列的名称和顺序不是很好。我有二十多个这样的列,它们不均匀地分布在用于其他目的的数百个列中,而且它们也没有命名约定。

当前解决方案:

当前,我手动拉出所有相关的列名,并将它们存储在名为columns的列表中。另外,存储所有内容的主数据框称为df

然后我的代码如下:

for column in columns:
    df_temp = df[['ID', '{}'.format(column)]]  # build temporary df to store first column
    df_temp.columns = ['ID', 'MED'] # Set a column naming convention
    df = df.append(df_temp)
df.drop(columns=columns)  # Get rid of excess columns, only want MED

此方法的问题是:-难以扩大规模-对于熊猫的循环很慢

我想知道:还有更好的方法吗?

python pandas dataframe
1个回答
0
投票

DataFrame.set_indexDataFrame.set_index和双DataFrame.stack一起使用-首先用于删除第二级,第二用于将索引转换为列:

DataFrame.stack
© www.soinside.com 2019 - 2024. All rights reserved.