如何重新组织数据帧,以便将一列中的所有重复值压缩为一行,其中包含另一列中的所有信息?

2024-09-29 19:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个CSV数据集,它不太清楚如何显示信息: enter image description here

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

enter image description here

现在,我想将每一行压缩为一个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'}}

Tags: 数据idfalsetrue编辑标题类型any
2条回答

您可以使用重置索引来获得所需的格式

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

你可以在这里使用^{}

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)

使用^{}

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.assign(val = True).set_index(['ID', 'Category']).val.unstack(fill_value= False)

相关问题 更多 >

    热门问题