首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas:组内最大值和最小值之间的差异

Pandas:组内最大值和最小值之间的差异
EN

Stack Overflow用户
提问于 2016-10-22 03:04:32
回答 3查看 20.8K关注 0票数 39

给定一个如下所示的数据帧

代码语言:javascript
复制
GROUP VALUE
  1     5
  2     2
  1     10
  2     20
  1     7

我想计算每组中最大值和最小值之间的差异。也就是说,结果应该是

代码语言:javascript
复制
GROUP   DIFF
  1      5
  2      18

在Pandas中,有什么简单的方法可以做到这一点?

在Pandas中,对于具有大约200万行和100万组的数据帧,执行此操作的快速方法是什么?

EN

回答 3

Stack Overflow用户

发布于 2016-10-22 03:19:59

使用@unutbu的df

每个定时的

unutbu的解决方案最适合大型数据集

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

df = pd.DataFrame({'GROUP': [1, 2, 1, 2, 1], 'VALUE': [5, 2, 10, 20, 7]})

df.groupby('GROUP')['VALUE'].agg(np.ptp)

GROUP
1     5
2    18
Name: VALUE, dtype: int64

np.ptp docs返回数组的范围

定时

small df

large df

df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 100, VALUE=np.random.rand(1000000)))

large df

多组

df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 10000, VALUE=np.random.rand(1000000)))

票数 49
EN

Stack Overflow用户

发布于 2016-10-22 03:08:44

通常,当您利用'max''min'等内置聚合器时,groupby/agg的性能最好。因此,要获得差值,首先计算maxmin,然后减去:

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'GROUP': [1, 2, 1, 2, 1], 'VALUE': [5, 2, 10, 20, 7]})
result = df.groupby('GROUP')['VALUE'].agg(['max','min'])
result['diff'] = result['max']-result['min']
print(result[['diff']])

收益率

代码语言:javascript
复制
       diff
GROUP      
1         5
2        18
票数 24
EN

Stack Overflow用户

发布于 2016-10-22 03:08:31

注意:__:这将完成工作,但有更快的方法。

您可以使用groupby()min()max()

代码语言:javascript
复制
df.groupby('GROUP')['VALUE'].apply(lambda g: g.max() - g.min())
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40183800

复制
相关文章

相似问题

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