Python如何实现Dataframe中一列中若干数字之和在另一列中相同金额的匹配?

有如下Dataframe:

图片说明

想实现的效果是(针对非零数字):

1) 找到Dr列和Cr列中一样的数字,输出相关数字所在行:

图片说明

2)找到Cr列中几个数字加起来等于Dr列中的某个数字的所有组合:

图片说明

没有穷举,类似是这样的效果...

关于第1个功能,我自己的思路如下:

for i in list(df['Cr']):
    if i == 0:
        continue

    if i in list(df['Dr']):
        df1 = df.iloc[np.flatnonzero(df['Dr'] == i)]
        df2 = df.iloc[np.flatnonzero(df['Cr'] == i)]
        df = pd.concat([df1,df2])
        print(df)

但是结果如下,不知道为何只显示出第1个匹配项:

图片说明

关于第2个功能...不知道我是否表达清楚了:
想要达到的效果类似于凑数字,想检查右列里是否有若干个数字加起来正好等于左列里的某一个数字,返回所有符合这个条件的组合。
比如左列第一个数字是10,先在右列找有没有10,没有的话从右列第1个数字开始往下加:先2个一组求和,看有没有等于10的,再3个一组求和,看有没有等于10的,再4个一组求和...这样一直循环下去

目前有一点思路是用itertools:

list_cr = list(df['Cr'])
comb2 = itertools.combinations(list_cr, 2) 
result2 = [sum(i) for i in comb2]

for i in result2:
    if i == 0:
        continue

    if i in list(df['Dr']):
        print(df.iloc[np.flatnonzero(df['Dr'] == i)]) 

但是不知道怎么做到按3个一组、4个一组这样继续循环下去...

刚学习Python的弱鸡一枚跪地求助各位大佬们!

是按列条件求和么还是啥,不太明白你表达的意思,条件求和直接query就可以