给定一个如下所示的数据帧
GROUP VALUE
1 5
2 2
1 10
2 20
1 7我想计算每组中最大值和最小值之间的差异。也就是说,结果应该是
GROUP DIFF
1 5
2 18在Pandas中,有什么简单的方法可以做到这一点?
在Pandas中,对于具有大约200万行和100万组的数据帧,执行此操作的快速方法是什么?
发布于 2016-10-22 03:19:59
使用@unutbu的df
每个定时的
unutbu的解决方案最适合大型数据集
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: int64np.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)))

发布于 2016-10-22 03:08:44
通常,当您利用'max'和'min'等内置聚合器时,groupby/agg的性能最好。因此,要获得差值,首先计算max和min,然后减去:
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']])收益率
diff
GROUP
1 5
2 18发布于 2016-10-22 03:08:31
注意:__:这将完成工作,但有更快的方法。
您可以使用groupby()、min()和max()
df.groupby('GROUP')['VALUE'].apply(lambda g: g.max() - g.min())https://stackoverflow.com/questions/40183800
复制相似问题