python - 确定熊猫数据框中每一列的最大值
问题描述
我有一个包含位置 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)
有没有更好的方法来获得这个输出
解决方案
通过比较eq
( ==
) 创建布尔掩码并将其转换为integer
s - 0, 1
to 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
推荐阅读
- plugins - 在 GeckoFX 中安装插件
- c# - c# API客户端使用桌面应用程序
- angular - Ag-grid 单元测试:检查 CellRenderer 渲染的单元格的内容
- c++ - Break 关键字是退出 for 循环的最有效方法吗?C/C++
- julia - Julia 打印语句在某些情况下不起作用
- angular - 检查是否已经使用打字稿触发了点击事件
- c - 使用并行编程计算总和
- android - 如果不为 null 或为空 Kotlin,则将值作为参数传递
- ruby-on-rails - 如何在 Rails 中转换原始时间字符串?
- python - 用另一个类中的另一个方法调用一个方法(在 Class_B 中调用 Method_B,在 Class_A 中调用 Method_A)