我有一个名为 df 的 DataFrame,它有超过 40,000 行和 90 多列。这是它的外观片段:p1 p2 p3 p4 value 0 1 0 1 51 0 1 0 41 1 0 0 60 1 0 1 2我希望能够找到 p1、p2、p3、p4 的独特组合的“价值”总和。因此,当 p2=1 和 p4=1 时(每组 p1、p2、p3、p4 中总是恰好有两个 1),在这种情况下,它们的“值”列的总和将为 7。这很容易找到df[(df.p2 == 1) & (df.p4 == 1)].value.sum()。但是,我不知道如何为我的DataFrame df 执行此操作,因为它有多大。它不是 p1-p4,而是由 p1-p89 组成。我最初的想法是创建一个新列,其中包含我要过滤的 89 列的值:unique_list = []for n in range(0,df.shape[0]): unique_list.append(str(df.values[n][1:90]))df['identifier'] = unique_list然后每一行都会有这 89 个值的标识符,所以我可以根据该行进行排序。然而,这需要相当长的时间。我估计这个 for 循环将需要大约 40 分钟才能完成。这不是令人难以忍受的长——当我完成提交这个问题时,它可能会接近完成。但是为了学习,我不禁认为必须有更有效的方法来完成这一点。那么,有吗?有没有办法让我在不需要创建新的标识符列的情况下做到这一点?如果重要的话,我的最终目标是创建一个新的 DataFrame,其中行数是 p1-p89 的唯一组合数。新 DataFrame 中的 'value' 列将是前一个 DataFrame 中该组合的所有实例的 'value' 列的总和,并且每个唯一组合都会有一个新的 find 'value' 列的总和p1-p89。
1 回答

跃然一笑
TA贡献1826条经验 获得超6个赞
似乎您可以使用groupby.
# Get everything except the value column.
group_cols = [o for o in df.columns if o != 'value']
# Group into unique combinations, sum the value column.
unique_counts = df.groupby(group_cols).sum().reset_index()
添加回答
举报
0/150
提交
取消