gpt4 book ai didi

python - 将数据框中其他列的值附加到列的最佳方法是什么

转载 作者:行者123 更新时间:2023-12-01 00:09:22 26 4
gpt4 key购买 nike

我接收数据的源系统有一个奇怪的结构。我想知道是否有比我找到的更好的方法来处理它。首先,数据如下:

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

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

当前解决方案:

目前,我手动提取所有相关的列名称并将它们存储在名为的列表中。此外,存储所有内容的主数据框称为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

该方法存在的问题是: - 难以扩大规模 - pandas 中的 for 循环很慢

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

最佳答案

使用DataFrame.set_indexDataFrame.stack和双Series.reset_index - 第一个用于删除第二级,第二个用于将索引转换为列:

df = df.set_index('ID').stack().reset_index(level=1, drop=True).reset_index(name='MED')
print (df)
ID MED
0 AA cold
1 AA flu
2 AA nasal
3 AA pain
4 AA cold
5 BB bleed
6 BB heart
7 CC cold
8 CC bleed

关于python - 将数据框中其他列的值附加到列的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59734628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com