要在给定条件和零和的情况下标识数据帧中的行组吗

2024-05-03 09:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

问题涉及具有以下列的数据帧:ID、ID2、月、日、余额

我想基于等于零的余额值对相同ID、ID2和月份的行进行对账。此外:

  • 相同ID、ID2和月份的多个组合加起来等于零-只能选择一组行,基于:
  • 组首个较低天数->;在下面的示例ID123中,ID2和Month可能具有以下组合:[10,10,-20],[10,-5,-5],[10,-5,-5](必须选择组合[10,-5,-5],因为其值较低)

目标是创建一个新列['Reconcired'],其中索引0、3和4应具有'Reconcired'

enter image description here

到目前为止,我能够编写一个函数,返回所有加为零的行组合的列表,但是我在添加日期条件时遇到了麻烦,只选择了一个,并将值返回到dataframe行。是否有一种简单的方法可以执行此数据核对任务

输入:

df = {'ID': {0: 123, 1: 123, 2: 123, 3: 123, 5: 123, 7: 123, 6: 234},
 'ID2': {0: 1, 1: 1, 2: 1, 3: 1, 5: 1, 7: 2, 6: 1},
 'Day': {0: 1, 1: 2, 2: 3, 3: 1, 5: 2, 7: 2, 6: 2},
 'Balance': {0: 10, 1: 20, 2: 10, 3: -5, 5: -20, 7: -10, 6: -10},
 'Month': {0: 2.0, 1: 2.0, 2: 2.0, 3: 2.0, 5: 2.0, 7: 2.0, 6: 2.0}}

组合功能

def subset_sum(numbers, target, partial=[]):
    s = sum(partial)
    # check if the partial sum is equals to target
    if s == target:
        print(partial)

    for i in range(len(numbers)):
        n = numbers[i]
        remaining = numbers[i + 1:]
        subset_sum(remaining, target, partial + [n])

如果问题背景不够清楚,请让我知道,我会尽力帮助更好地解释

非常感谢你的帮助