Python 计算每个供应商的最大分数-最小分数,单位为:
我想计算熊猫数据框架中项目的最大分数-最小分数 当前df如下所示:Python 计算每个供应商的最大分数-最小分数,单位为:,python,pandas,dataframe,pandas-groupby,Python,Pandas,Dataframe,Pandas Groupby,我想计算熊猫数据框架中项目的最大分数-最小分数 当前df如下所示: projectID supplierID score 1 1 50 1 2 60 1 3 75 我希望它看起来像这样: 最大最小值=>75-50=25 projectID supplierID score max-min 1 1 50 25 1 2 6
projectID supplierID score
1 1 50
1 2 60
1 3 75
我希望它看起来像这样:最大最小值=>75-50=25
projectID supplierID score max-min
1 1 50 25
1 2 60 25
1 3 75 25
我想对每个projectd执行这个操作,您可以使用它通过一个lambda函数将结果广播回来,该函数进行减法和
您可以使用
GroupBy
+transform
:
g = df.groupby('projectID')['score']
df['max-min'] = g.transform('max') - g.transform('min')
transform
方法将常规GroupBy
的结果与grouper系列对齐。使用(“峰对峰”):
您可以使用
groupby
获取最大值和最小值,然后join
将“projectId”上的结果作为新列:
import pandas as pd
df = pd.DataFrame([[1, 1, 30],
[1, 2, 50],
[2, 1, 60],
[2, 2, 40],
[1, 3, 20]],
columns=["projectID", "supplierID", "score"])
df.join( df.groupby(["projectID"])["score"].max()
- df.groupby(["projectID"])["score"].min(),
on="projectID", rsuffix="_max-min")
如果我想计算每个分数与最大分数之间的差异,该怎么办?如何做到这一点?
df['max-min']=df.groupby('projectID').score.transform(np.ptp)
#df.groupby('projectID').score.transform(np.ptp)
Out[229]:
0 25
1 25
2 25
Name: score, dtype: int64
import pandas as pd
df = pd.DataFrame([[1, 1, 30],
[1, 2, 50],
[2, 1, 60],
[2, 2, 40],
[1, 3, 20]],
columns=["projectID", "supplierID", "score"])
df.join( df.groupby(["projectID"])["score"].max()
- df.groupby(["projectID"])["score"].min(),
on="projectID", rsuffix="_max-min")