Dav*_*vid 29 python numpy pandas
给定一个看起来像这样的数据框
GROUP VALUE
1 5
2 2
1 10
2 20
1 7
Run Code Online (Sandbox Code Playgroud)
我想计算每组中最大值和最小值之间的差异.也就是说,结果应该是
GROUP DIFF
1 5
2 18
Run Code Online (Sandbox Code Playgroud)
在熊猫中这样做的简单方法是什么?
在Pandas中为大约200万行和100万个组的数据帧执行此操作的快速方法是什么?
piR*_*red 32
使用@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: int64
Run Code Online (Sandbox Code Playgroud)
np.ptpdocs返回数组的范围
时间
很小df
大 df
df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 100, VALUE=np.random.rand(1000000)))
大df
许多团体
df = pd.DataFrame(dict(GROUP=np.arange(1000000) % 10000, VALUE=np.random.rand(1000000)))
unu*_*tbu 20
groupby/agg当您利用内置聚合器(如'max'和)时,通常表现最佳'min'.因此获得的区别,首先计算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']])
Run Code Online (Sandbox Code Playgroud)
产量
diff
GROUP
1 5
2 18
Run Code Online (Sandbox Code Playgroud)
您可以使用groupby(),min()以及max():
df.groupby('GROUP')['VALUE'].apply(lambda g: g.max() - g.min())
Run Code Online (Sandbox Code Playgroud)