吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1344|回复: 5
收起左侧

[已解决] Python pandas apply方法的应用

[复制链接]
mrliu133 发表于 2021-8-24 13:39
本帖最后由 mrliu133 于 2021-8-24 20:12 编辑

下面是我的一个叫做revenue_data的DataFrame,我需要根据月份来判断总价格应该如何处理,要求是这样:如果月份是7、8月份,那么对应的总价格要除以30000,不是7、8月份,总价格要除以20000.我在想如何通过apply实现这个操作。求助各位大佬!!!

[td]
arrival_date_month
hotel
total_price
8
1
City Hotel
26.377266
9
1
Resort Hotel
12.437193
6
2
City Hotel
38.400599
7
2
Resort Hotel
18.932737
15
3
Resort Hotel
27.774822
14
3
City Hotel
54.811296
0
4
City Hotel
68.453941
1
4
Resort Hotel
36.497996
17
5
Resort Hotel
41.279494
16
5
City Hotel
78.440667
13
6
Resort Hotel
55.771113
12
6
City Hotel
73.355813
11
7
Resort Hotel
80.470650
10
7
City Hotel
56.180908
3
8
Resort Hotel
97.968554
2
8
City Hotel
65.881062
22
9
City Hotel
67.931298
23
9
Resort Hotel
49.247103
20
10
City Hotel
62.050656
21
10
Resort Hotel
30.790179
18
11
City Hotel
34.284156
19
11
Resort Hotel
17.405493
5
12
Resort Hotel
22.283578
4
12
City Hotel
32.068453


下面是两种不是通过apply实现目的的两种方法:
方法1:
[Python] 纯文本查看 复制代码
condition = (revenue_data.arrival_date_month==7)|(revenue_data.arrival_date_month==8)
revenue_data.loc[(revenue_data.arrival_date_month==7)|(revenue_data.arrival_date_month==8),"total_price"] /= 30000 # 转换成万欧元
revenue_data.loc[~(condition), "total_price"] = revenue_data.loc[~(condition), "total_price"] / 20000 # 转换成万欧元
revenue_data


方法2:
[Python] 纯文本查看 复制代码
for row in revenue_data.index:
    if revenue_data.loc[row, "arrival_date_month"] == 7 or revenue_data.loc[row, "arrival_date_month"] == 8:
        # print(revenue_data.loc[row, "total_price"])
        revenue_data.loc[row, "total_price"] /= 30000
    else:
        revenue_data.loc[row, "total_price"] /= 20000
revenue_data

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| mrliu133 发表于 2021-8-24 13:42
revenue_data看不清楚的可以看看这个图片
revenue_data.png
super谦 发表于 2021-8-24 15:01
revenue_data['total_price'] = revenue_data.apply(lambda x: x['total_price'] / 30000 if x["arrival_data_month"] == 7 or x["arrival_data_month"] == 8 else x['total_price'] / 20000, axis=1)
bianji 发表于 2021-8-24 18:39
本帖最后由 bianji 于 2021-8-24 19:17 编辑

楼上正解………………


 楼主| mrliu133 发表于 2021-8-24 20:10
super谦 发表于 2021-8-24 15:01
[md]```python
revenue_data['total_price'] = revenue_data.apply(lambda x: x['total_price'] / 30000 i ...

大佬顶呱呱,你这是我想写的apply的用法,但是我一直没有写出来。看了你的代码,豁然开朗
rsnodame 发表于 2021-8-25 12:16
其实你的方法1更好啊,比较符合pandas的优势
apply效率应该没方法1高
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表