Py学习  »  Python

python:groupby,根据其他列的最大值创建新列[duplicate]

julien1337 • 5 年前 • 1946 次点击  

我有一个包含位置ID、商店名称和商店收入的数据框。我想确定每个地区收入最高的商店

我为此写了一个代码,但不确定是否有更好的方法来处理这个案子

import pandas as pd    
dframe=pd.DataFrame({"Loc_Id":[1,2,2,1,2,1,3,3],"Store":["A","B","C","B","D","B","A","C"],
                 "Revenue":[50,70,45,35,80,70,90,65]})

#group by location id, then save max per location in new column
dframe["max_value"]=dframe.groupby("Loc_Id")["Revenue"].transform(max)

#create new column by checking if the revenue equal to max revenue
dframe["is_loc_max"]=dframe.apply(lambda x: 1 if x["Revenue"]==x["max_value"] else 0,axis=1)

#drop the intermediate column 
dframe.drop(columns=["max_value"],inplace=True)

这是所需的输出: ![enter image description here

有没有更好的方法得到这个输出

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40547
 
1946 次点击  
文章 [ 1 ]  |  最新文章 5 年前
jezrael
Reply   •   1 楼
jezrael    6 年前

通过比较创建布尔掩码 eq ( == )把它转换成 integer S - 0, 1 False, True :

s = dframe.groupby("Loc_Id")["Revenue"].transform('max')
dframe["max_value"]= s.eq(dframe["Revenue"]).astype(int)
print (dframe)
   Loc_Id Store  Revenue  max_value
0       1     A       50          0
1       2     B       70          0
2       2     C       45          0
3       1     B       35          0
4       2     D       80          1
5       1     B       70          1
6       3     A       90          1
7       3     C       65          0