看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
我们手里有一家连锁超市 2024 年 6 月 1–5 日 的三家门店(北京店、上海店、广州店)营业额数据,输出每家门店本月最高营业额及该金额出现的日期。
构造数据如下:
import pandas as pd
data = {
'日期': pd.date_range('2024-06-01', periods=5, freq='D'),
'北京店': [9.2, 8.8, 10.1, 19.7, 10.5],
'上海店': [10.5, 11.2, 10.8, 12.0, 11.5],
'广州店': [18.7, 9.0, 9.5, 9.2, 9.8]
}
df = pd.DataFrame(data)
df
# ...
日期 | 北京店 | 上海店 | 广州店 |
---|---|---|---|
2024-06-01 | 9.2 | 10.5 | 18.7 |
2024-06-02 | 8.8 | 11.2 | 9.0 |
2024-06-03 | 10.1 | 10.8 | 9.5 |
2024-06-04 | 19.7 | 12.0 | 9.2 |
2024-06-05 | 10.5 | 11.5 | 9.8 |
目标:在 不手写任何循环 的情况下,输出每家门店
常规的思路为:
idxmax
→ 找到每列最大值所在的日期;max
→ 取到最大值本身。另外还有其他的一些思路。
(
df.melt(id_vars='日期', var_name='门店', value_name='最高营业额')
.loc[lambda d: d.groupby('门店')['最高营业额'].idxmax()]
.set_index('门店')
)
(
df.set_index('日期')
.agg(['idxmax', 'max'])
.T
.rename(columns={'idxmax':'日期','max':'最高营业额'})
)
(
df.set_index('日期')
.idxmax()
.to_frame('日期')
.assign(最高营业额=df.set_index('日期').max())
)
运行结果(三种方法一致):
日期 最高营业额
门店
北京店 2024-06-04 19.7
上海店 2024-06-04 12.0
广州店 2024-06-01 18.7
(完)
更新时间:2025-08-13 19:31:37 标签:pandas python 营业额 门店