首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何根据另一列减去另一列的值,并按其他列分组?

如何根据另一列减去另一列的值,并按其他列分组?
EN

Stack Overflow用户
提问于 2021-01-08 09:57:47
回答 1查看 92关注 0票数 1

我想得到按ISIN和variable分组的两个值(最新减去最旧)之间的差异。例如,对于变量ab,我应该得到-1,对于变量c,我应该得到11。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   check = pd.DataFrame({
        'date':[1,2,1,2,1,2],
        'ISIN':[1,1,2,2,3,3],
        'variable':['a','a','b','b','c','c'],
        'value':[8,9,8,9,21,10]    
    })
    result = check.groupby(['ISIN', 'variable'])['value'].apply(lambda x: check.loc[x.idxmax(), 'value'] - check.loc[x.idxmin(), 'value']).reset_index()

这是我得到的最好的结果,但它只显示正值,因为这就是idxmax()/idxmin()的工作方式。有没有一种方法可以将最近日期减去最近日期,然后对这些值进行分组减去?

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 11:39:39

我认为下面的代码应该可以解决这个问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas as pd

check = pd.DataFrame({
    'date': [1,2,1,2,1,2],
    'ISIN': [1,1,2,2,3,3],
    'variable': ['a','a','b','b','c','c'],
    'value': [8,9,8,9,21,10]    
})

result = check.groupby(['ISIN', 'variable'])['date'].apply(
    lambda x: check.loc[x.idxmin(), 'value'] - check.loc[x.idxmax(), 'value']
).reset_index()
result.columns = ['ISIN', 'variable', 'value']
print(result)

它给出了输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   ISIN variable  value
0     1        a     -1
1     2        b     -1
2     3        c     11

此版本在date上应用idxminidxmax,而不是在value上。

您的原值将其应用于value,因此在这种情况下,该值将始终为正(因为它将始终从最大值中减去最小值)。

我还切换了idxminidxmax以实现预期的输出-您似乎以相反的方式获得了它,这将否定结果。

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

https://stackoverflow.com/questions/65626845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文