首页 > 解决方案 > 如何根据列中具有相同值的行对行进行分组,然后在每个子集上运行我的代码?

问题描述

我有一个 csv 文件,它是通过一些代码行创建的,其中包括以下内容:

'BatchID' 列,格式为 DEFGH12-01,指定每个单元所在的批次,以及单元列及其完整 ID 号,'UnitID',格式为 DEFGH12-01_x01_y01。每个单元 (UnitID) 都属于特定批次(因此单元 ID 号对应于它所在的 BatchID。

我有一个特定的算法,我一直在整个单元 ID 数据集上运行。我想根据具有相同的 batchID 值对单元进行分组(因为每个批次中有许多独特的单元),然后在这些单元批次的每个子集上运行算法。

我怎样才能做到这一点?

标签: pythonpandascsvgroup-bygrouping

解决方案


最简单的方法是使用 pandas 分组。这是一个例子:

创建数据:

df = pd.DataFrame({"A": [1,2,3,4,5], "B":[1,2,3,4,5], "C": ['GROUP_A', 'GROUP_A', 'GROUP_A', 'GROUP_B', 'GROUP_B']})

应用你的功能:

groups_list = []
for group_name, group_values in df.groupby("C"):
    # applying a function on a column based on group
    group_values = group_values.assign(A=group_values.A.apply(lambda x: x ** 2))

    # for re-creating the df
    groups_list.append(group_values)

# if there is only 1 group , else is needed
mod_df = pd.concat(groups_list, axis=0) if len(groups_list) > 1 else groups_list[0]
print(mod_df)

推荐阅读