我有一个数据框,行中有设备列表,列中有许多实验需要的设备 struct ,如图所示:
equipment exp-1 exp-2 ... exp-n
equip-1 T F T
. . . .
equip-n T F F
设备名称是字符串,布尔值定义给定实验是否需要该设备.我试图将每个实验的不同设备要求浓缩成通用列表.最终目标是生成可用于此集合中多个实验的设备列表.
我通过以下步骤实现了这一点:
- 转换数据帧并将所有布尔字段连接在一起
- 获取这些连接值的所有唯一实例
- 使用遍历数据帧.loc并将组合id分配给每一行
- 删除副本.
最终结果如下:
experiment equip-1 ... equip-n equip-concat combo
exp-1 T T T...T 0
exp-2 F F F...F 1
exp-3 T F T...F 2
然后,我能够再次将其转置,并将其粘贴回原始数据帧.所以我现在有一个布尔列,每个组合显示一件设备是否属于它.
equipment exp-1 exp-2 ... exp-n combo-1 ...combo-n
equip-1 T F T T F
. . . .
equip-n T F F F F
我还需要得到一个列表,列出属于给定组合的所有实验:
combo 1: exp-1, exp-2, exp4
combo 2: exp-3, exp-5
...
我通过对组合数据进行分组并打印出来实现了这一点.
有没有一种更干净的方法可以从最初的实验定义中得到我需要的结果?我的方法似乎有点笨拙.
编辑:
dfexp = df.copy().set_index("equipment").transpose()
dfexpagg = dftests.agg("".join, axis=1)
dfexpagg.name = "Agg Gear"
dfexp["aggregated_gear"] = dfexpagg
unique_configs = dfexp["aggregated_gear"].unique()
for x, config in enumerate(unique_configs):
dfexp.loc[dfexp["aggregated_gear"] == config, "Config"] = str(x)
dfconfigs = dfexp.set_index("Config"), drop=True).drop("aggregated_gear", axis=1).drop_duplicates().transpose()
I made a highlighted example in excel, hopefully that helps clarify the end goal. The configs are the columns I'm trying to generate.