akaduoduo 2019-12-10 17:15 采纳率: 0%
浏览 1033

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的弱鸡一枚跪地求助各位大佬们!

  • 写回答

1条回答 默认 最新

  • 'ゞBibo。 2019-12-10 17:43
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出