python - Pandas:如何按月和年过滤并按分组ID返回最大值?
问题描述
我有以下任务要在 DataFrame 上执行:
- 在 2014 年 9 月之前过滤日期并存储在新的 DataFrame 中。
- 查找每个商店产生的收入。
- 找出 2014 年 9 月产生的最大收入。
我试过这个python 3代码。
def get_year(x):
return x.split(".")[-1]
def get_month(x):
return x.split(".")[-2]
transactions['year'] = transactions['date'].map(get_year)
transactions['month'] = transactions['date'].map(get_month)
transactions['item_cnt_day'] = transactions['item_cnt_day'].replace(-1.0, 0)
transactions["Revenue"] = transactions["item_price"]*transactions["item_cnt_day"]
sort = transactions[(transactions["year"] == 2014) & (transactions["month"] == 9)]
max(sort.groupby(transactions["Revenue"]).sum())
date date_block_num shop_id item_id item_price item_cnt_day year month Revenue
02.01.2013 0 59 22154 999.00 1.0 2013 01 999.00
03.01.2013 0 25 2552 899.00 1.0 2013 01 899.00
05.01.2013 0 25 2552 899.00 0.0 2013 01 0.00
06.01.2013 0 25 2554 1709.05 1.0 2013 01 1709.05
15.01.2013 0 25 2555 1099.00 1.0 2013 01 1099.00
解决方案
您可以使用:
#changed sample data for Septmber 2014
print (transactions)
date date_block_num shop_id item_id item_price item_cnt_day
0 02.01.2013 0 59 22154 999.00 1.0
1 03.01.2013 0 25 2552 899.00 1.0
2 05.09.2014 0 25 2552 899.00 0.0
3 06.09.2014 0 25 2554 1709.05 1.0
4 15.09.2014 0 26 2555 1099.00 1.0
首先将列转换date
为日期时间并提取年份和月份:
transactions['date'] = pd.to_datetime(transactions['date'], dayfirst=True)
transactions['year'] = transactions['date'].dt.year
transactions['month'] = transactions['date'].dt.month
transactions['item_cnt_day'] = transactions['item_cnt_day'].replace(-1.0, 0)
transactions["Revenue"] = transactions["item_price"]*transactions["item_cnt_day"]
print (transactions)
date date_block_num shop_id item_id item_price item_cnt_day \
0 2013-01-02 0 59 22154 999.00 1.0
1 2013-01-03 0 25 2552 899.00 1.0
2 2014-09-05 0 25 2552 899.00 0.0
3 2014-09-06 0 25 2554 1709.05 1.0
4 2014-09-15 0 26 2555 1099.00 1.0
year month Revenue
0 2013 1 999.00
1 2013 1 899.00
2 2014 9 0.00
3 2014 9 1709.05
4 2014 9 1099.00
sort = transactions[(transactions["year"] == 2014) & (transactions["month"] == 9)]
print (sort)
date date_block_num shop_id item_id item_price item_cnt_day \
2 2014-09-05 0 25 2552 899.00 0.0
3 2014-09-06 0 25 2554 1709.05 1.0
4 2014-09-15 0 26 2555 1099.00 1.0
year month Revenue
2 2014 9 0.00
3 2014 9 1709.05
4 2014 9 1099.00
sum
按列聚合shop_id
:
out1 = sort.groupby('shop_id', as_index=False)['Revenue'].sum()
print (out1)
shop_id Revenue
0 25 1709.05
1 26 1099.00
Revenue
通过in的最大值获取商店out1
:
out2 = out1.set_index('shop_id')['Revenue'].idxmax()
print (out2)
25
推荐阅读
- python - 具有零值和非零值的数组的 Softmax 导致数组只有非零值
- reactjs - 在 Div 中添加子元素时,虽然使用 UseEffect 触发,但到达 useRef() 当前属性返回未知
- python - Django / Crispy 表单继承未转换为呈现的 HTML 页面
- node.js - (节点:5321)UnhandledPromiseRejectionWarning:错误:用户“postgres”的密码验证失败
- apache-kafka - Ccloudexporter - 如何计算发送到 Kafka 主题的消息
- javascript - 如何仅从一个元素中检测突出显示的文本?
- javascript - 带有拼接的文本替换不适用于微笑(或多字节字符)
- javascript - IMGUR API - 在 localhost 中运行应用程序时出现错误 429
- matlab - 在 matlab 中将 affine2d 命令与 dicom 图像一起使用
- django - 登录后显示 AnonymousUser 的 django 登录