首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫在两个数据帧之间减去

熊猫在两个数据帧之间减去
EN

Stack Overflow用户
提问于 2017-10-30 21:11:29
回答 1查看 246关注 0票数 1

DFOne

代码语言:javascript
复制
 1. ID-1  NumberValueCol1- 10 
 2. ID-2  NumberValueCol1--11
 3. ID-3  NumberValueCol1--20
 4. ID-4  NumberValueCol1--13
 5. ID-5  NumberValueCol1--15

DFTwo

代码语言:javascript
复制
 1. ID-1  NumberValueCol1- 5
 2. ID-2  NumberValueCol1--7
 3. ID-3  NumberValueCol1--9
 4. ID-4  NumberValueCol1--6
 5. ID-5  NumberValueCol1--3

我需要从DFOne.NumberValueCol1中的每个值减去DFTwo,直到得到最小的差值为止。

第一次迭代将从DFTwo中的每个值中减去DFOne.NumberValueCol1-10,这将导致

ID结果(DFOne.NumberValueCol1,每个DFTwo.NumberValueCol2值10个值)

代码语言:javascript
复制
 1. Result - 5
 2. Result - 3
 3. Result - 1
 4. Result - 4
 5. Result - 7

在这个例子中,ID3-DFTwo.NumberValueCol2 (9)产生最小的差1,所以我想把这个值映射到DFOne.NumberValueCol1 - 10。

第二次迭代将以ID 2,DFOne.NumberValueCol1值11开始,但是,它将从一个匹配点开始,而不是从DFTwo.NumberValueCol2的开头开始减法。因此,由于与ID3匹配,下一个起点将是ID4,它将执行与第一个逻辑相同的操作,以得到最小的差异。

我希望这不是太令人困惑。我来自this世界,所以我试图了解如何使用Pandas而不是传统的sql服务器游标来完成这种类型的计算。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-30 23:06:11

您的问题总结如下:

  1. 在DFTwo中找到最大值,从DFOne中的第一个值中减去它。
  2. 使用DFTwo中最大值的索引,从该索引开始切片DFTwo。
  3. 转到步骤1,使用DFone的第二行。

一个有用的例子:

代码语言:javascript
复制
import pandas as pd

df1 = {'id': [1,2,3,4,5], 'value': [10,11,20,13,15]}
df2 = {'id': [1,2,3,4,5], 'value': [5,7,9,6,3]}

df1 = pd.DataFrame(data=df1)
df2 = pd.DataFrame(data=df2)
print("DFTwo")
print(df2)
print('\n')
min_index = 0
df_output = []
for i in df1['value']:
    try:
        new_val = i - max(df2['value'])
        max_index = int(df2['id'][df2['value'] == max(df2['value'])].values)
        df2 = df2.iloc[max_index:,]
        df_output.append( (max_index, new_val) )
    except:
        break
print("Output")
print(pd.DataFrame(df_output, columns = ['id','result']))

然而,我们在这里遇到的问题是,DFTwo最终为零。

代码语言:javascript
复制
2 -- 1
   id  value
3   4      6
4   5      3
0 -- 5
   id  value
4   5      3
0 -- 17
Empty DataFrame
Columns: [id, value]
Index: []
Traceback (most recent call last):
  File "C:/Users/Tyler/Desktop/pd_test.py", line 11, in <module>
    new_val = i - max(df2['value'])
ValueError: max() arg is an empty sequence

新的output子句的输出:

代码语言:javascript
复制
DFTwo
   id  value
0   1      5
1   2      7
2   3      9
3   4      6
4   5      3


Output
   id  result
0   3       1
1   4       5

表面上,这在您的实际用例中不会是一个问题,因为DFTwo足够大来支持这种切片吗?如果没有更多关于实际业务逻辑的信息,这是我最好的尝试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47024223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档