python - 如何重新组织熊猫数据框,以便将一列中的所有重复值压缩成一行,其中包含另一列中的所有信息?
问题描述
抱歉标题不清楚,但我很难把我想做的事用语言表达出来。
基本上,每个图像可能与一个或多个子类型相关联。我设法以更容易阅读的方式操作数据集:
现在,我想将每一行压缩为一个 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'}}
解决方案
你可以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)
或者
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)
推荐阅读
- docker - 如何将 Mysql docker 容器连接到 Grafana
- powerbi - PowerBi 计数最小值
- git - 在“Git:打开更改”编辑器处于活动状态时在 VSCode 中添加一个快捷键
- flask - 从 shell vs route 查询数据库
- linux - 将读取输入默认为bash中的变量
- javascript - 如何在exceljs中自动调整列宽
- python - Tkinter / 标签更新 / 内存泄漏?
- azure-devops - 根据条件参数在池上执行 Azure Devops 作业
- python - 在日期索引的数据框中向上移动 x 行
- python - 扩展一个类而不访问其 __init__ 方法