我有一个数据框,行中有设备列表,列中有许多实验需要的设备 struct ,如图所示:

equipment  exp-1 exp-2 ... exp-n
equip-1    T     F         T
.          .     .         .
equip-n    T     F         F

设备名称是字符串,布尔值定义给定实验是否需要该设备.我试图将每个实验的不同设备要求浓缩成通用列表.最终目标是生成可用于此集合中多个实验的设备列表.

我通过以下步骤实现了这一点:

  1. 转换数据帧并将所有布尔字段连接在一起
  2. 获取这些连接值的所有唯一实例
  3. 使用遍历数据帧.loc并将组合id分配给每一行
  4. 删除副本.

最终结果如下:

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. enter image description here

推荐答案

迭代列:

df = pd.DataFrame([['T', 'F', 'T','T'], ['F', 'F', 'T','F'], ['F', 'F','T','F']], index = ['eq1', 'eq2', 'eq3'], columns = ['ex1', 'ex2', 'ex3', 'ex4'])

output = {}
for i, col in enumerate(df.columns):
    temp = df.index[df[col] == 'T'].tolist()
    if temp not in output.values():
        output[f'combo-{i}'] = temp

输出:

{'combo-0': ['eq1'], 'combo-1': [], 'combo-2': ['eq1', 'eq2', 'eq3']}

Python相关问答推荐

在有限数量的唯一字母的长字符串中,找到包含重复不超过k次的所有唯一字母的最长子字符串

Plotly Dash函数来切换图形参数-pPython

取相框中一列的第二位数字

手动为pandas中的列上色

为什么我的代码会进入无限循环?

Django文件上传不起作用:文件未出现在媒体目录或数据库中

两极:如何分割一个大 pyramid 并并行保存每个

Polars -转换为PL后无法计算熵.列表

是pandas.DataFrame使用方法查询后仍然排序吗?

在for循环中仅执行一次此操作

拆分pandas列并创建包含这些拆分值计数的新列

Python:在类对象内的字典中更改所有键的索引,而不是仅更改一个键

优化pytorch函数以消除for循环

我想一列Panadas的Rashrame,这是一个URL,我保存为CSV,可以直接点击

使用groupby方法移除公共子字符串

实现神经网络代码时的TypeError

幂集,其中每个元素可以是正或负""""

跳过嵌套JSON中的级别并转换为Pandas Rame

PYTHON、VLC、RTSP.屏幕截图不起作用

当条件满足时停止ODE集成?