首页 > 解决方案 > 如何重新组织熊猫数据框,以便将一列中的所有重复值压缩成一行,其中包含另一列中的所有信息?

问题描述

抱歉标题不清楚,但我很难把我想做的事用语言表达出来。

我有一个 CSV 数据集,它在如何呈现信息方面不是很清楚: 在此处输入图像描述

基本上,每个图像可能与一个或多个子类型相关联。我设法以更容易阅读的方式操作数据集:

在此处输入图像描述

现在,我想将每一行压缩为一个 ID,并为每个子类型设置 True/False,如下所示:

ID        Epidural Intraparenchymal Intraventricular Subarachnoid Subdural Any
aec8e68b3 False    False            False            True        False    True

希望我已经说清楚了。有人可以帮忙吗?

编辑:应@Ch3steR 要求的字典

{'ID': {21: 'aec8e68b3',
  23: 'aec8e68b3',
  57: 'ff7125125',
  59: 'ff7125125',
  115: '9b7d000a2',
  119: '9b7d000a2',
  172: '85f1fa3bd',
  173: '85f1fa3bd',
  181: '4598fa77a',
  182: '4598fa77a',
  184: '4598fa77a',
  185: '4598fa77a',
  208: '4c45dcf36',
  209: '4c45dcf36',
  313: 'a837bb1fc',
  315: 'a837bb1fc',
  317: 'a837bb1fc',
  358: '8927bc6ee',
  359: '8927bc6ee',
  369: 'ffc54be74',
  371: 'ffc54be74',
  439: '945b3f1e4',
  442: '945b3f1e4',
  443: '945b3f1e4',
  483: '35b9fc2cc'},
 'Category': {21: 'subarachnoid',
  23: 'any',
  57: 'subarachnoid',
  59: 'any',
  115: 'intraparenchymal',
  119: 'any',
  172: 'subdural',
  173: 'any',
  181: 'intraparenchymal',
  182: 'intraventricular',
  184: 'subdural',
  185: 'any',
  208: 'subdural',
  209: 'any',
  313: 'intraparenchymal',
  315: 'subarachnoid',
  317: 'any',
  358: 'subdural',
  359: 'any',
  369: 'subarachnoid',
  371: 'any',
  439: 'intraparenchymal',
  442: 'subdural',
  443: 'any',
  483: 'subarachnoid'}}

标签: pythonpandas

解决方案


你可以pd.crosstab在这里使用。

df
            ID          Category
21   aec8e68b3      subarachnoid
23   aec8e68b3               any
57   ff7125125      subarachnoid
59   ff7125125               any
115  9b7d000a2  intraparenchymal
119  9b7d000a2               any
172  85f1fa3bd          subdural
173  85f1fa3bd               any
181  4598fa77a  intraparenchymal
182  4598fa77a  intraventricular
184  4598fa77a          subdural
185  4598fa77a               any
208  4c45dcf36          subdural
209  4c45dcf36               any

pd.crosstab(df['ID'], df['Category']).astype(bool)

Category    any  intraparenchymal  intraventricular  subarachnoid  subdural
ID
4598fa77a  True              True              True         False      True
4c45dcf36  True             False             False         False      True
85f1fa3bd  True             False             False         False      True
9b7d000a2  True              True             False         False     False
aec8e68b3  True             False             False          True     False
ff7125125  True             False             False          True     False
  • 要删除轴名称,请使用_.rename_axis(index=None, columns=None)

或者

使用pd.pivot_table

df.pivot_table(index='ID', columns='Category', fill_value=0, aggfunc='size')

df.assign(val = True).pivot_table(index='ID', columns= 'Category', 
                                  values = 'val',fill_value=False)

使用的另一个想法df.unstack

df.assign(val = True).set_index(['ID', 'Category']).val.unstack(fill_value= False)

推荐阅读