Python pandas apply方法的应用
本帖最后由 mrliu133 于 2021-8-24 20:12 编辑下面是我的一个叫做revenue_data的DataFrame,我需要根据月份来判断总价格应该如何处理,要求是这样:如果月份是7、8月份,那么对应的总价格要除以30000,不是7、8月份,总价格要除以20000.我在想如何通过apply实现这个操作。求助各位大佬!!!
arrival_date_monthhoteltotal_price
81City Hotel26.377266
91Resort Hotel12.437193
62City Hotel38.400599
72Resort Hotel18.932737
153Resort Hotel27.774822
143City Hotel54.811296
04City Hotel68.453941
14Resort Hotel36.497996
175Resort Hotel41.279494
165City Hotel78.440667
136Resort Hotel55.771113
126City Hotel73.355813
117Resort Hotel80.470650
107City Hotel56.180908
38Resort Hotel97.968554
28City Hotel65.881062
229City Hotel67.931298
239Resort Hotel49.247103
2010City Hotel62.050656
2110Resort Hotel30.790179
1811City Hotel34.284156
1911Resort Hotel17.405493
512Resort Hotel22.283578
412City Hotel32.068453
下面是两种不是通过apply实现目的的两种方法:
方法1:
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:
for row in revenue_data.index:
if revenue_data.loc == 7 or revenue_data.loc == 8:
# print(revenue_data.loc)
revenue_data.loc /= 30000
else:
revenue_data.loc /= 20000
revenue_data
revenue_data看不清楚的可以看看这个图片 ```python
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 19:17 编辑
楼上正解………………
super谦 发表于 2021-8-24 15:01
```python
revenue_data['total_price'] = revenue_data.apply(lambda x: x['total_price'] / 30000 i ...
大佬顶呱呱,你这是我想写的apply的用法,但是我一直没有写出来。看了你的代码,豁然开朗{:1_921:} {:301_984:}其实你的方法1更好啊,比较符合pandas的优势
apply效率应该没方法1高
页:
[1]