鱼C论坛

 找回密码
 立即注册
查看: 1843|回复: 3

弱鸡求助!一个复杂匹配功能如何实现!

[复制链接]
发表于 2019-12-10 16:48:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 akaduoduo 于 2019-12-10 16:50 编辑

求助鱼C的大佬们!
有如下Dataframe:
Dr  Cr
a  10   0
b   0   1
c   0   6
d   2   0
e   3   0
f   7   0
g   0   5
h   0   2
i   0   3
j   0   5

想实现的效果是(针对非零数字):
1. 找到Dr列和Cr列中一样的数字,输出相关数字所在行:
d   2   0
h   0   2

e   3   0
i   0   3
2. 找到Cr列中几个数字加起来等于Dr列中的某个数字的所有组合:
a  10   0
g   0   5
j   0   5

a  10   0
b   0   1
c   0   6
i   0   3

f   7   0
g   0   5
h   0   2

f   7   0
h   0   2
j   0   5

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

关于第1个功能,我自己的思路如下:
  1. for i in list(df['Cr']):
  2.     if i == 0:
  3.         continue
  4.             
  5.     if i in list(df['Dr']):
  6.         df1 = df.iloc[np.flatnonzero(df['Dr'] == i)]
  7.         df2 = df.iloc[np.flatnonzero(df['Cr'] == i)]
  8.         df = pd.concat([df1,df2])
  9.         print(df)
复制代码


但是结果如下,不知道为何只显示出第1个匹配项:
   Dr  Cr
d   2   0
h   0   2

关于第2个功能...毫无头绪...
360度后空翻跪地磕头求助!!!

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-10 18:12:14 | 显示全部楼层
第一个问题是你把新生成的df给df自己了,那后续能遍历出来个啥?
后面的先研究差值,记得去重,递归下就行,还有0能被各种0加起来不算么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-12-10 19:52:25 | 显示全部楼层
塔利班 发表于 2019-12-10 18:12
第一个问题是你把新生成的df给df自己了,那后续能遍历出来个啥?
后面的先研究差值,记得去重,递归下就行 ...

谢谢大佬指点,第1个问题解决了。。。

关于第2个问题,能再请教下递归具体怎么写吗?
我现在仅有一点思路是笨办法用itertools,把Cr列分成2个一组求和,再到Dr列匹配:
  1. list_cr = list(df['Cr'])
  2. comb2 = itertools.combinations(list_cr, 2)
  3. result2 = [sum(i) for i in comb2]

  4. for i in result2:
  5.     if i == 0:
  6.         continue

  7.     if i in list(df['Dr']):
  8.         print(df.iloc[np.flatnonzero(df['Dr'] == i)])
复制代码


但是不知道要怎么继续按3个一组、4个一组、5个一组这样循环下去...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-10 20:18:38 | 显示全部楼层
先统计没0的,这个可以去看leetocde n数之和类似的,我最近太忙,没时间写这样的代码- -,除非RMB
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-1-21 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表