有点有趣的问题。
我有一个(大) table ,看起来像:
我想改造 gross_revenue
列取决于 store_id
的值和department_id
.
为了便于讨论,假设我想增加所有 Store1
销售额增加25%,增加Veg
销售额增加 10%,并且 Fruit
销售额提高了 75%(我们暂时不用担心订单)。
我希望用户能够编写:
modifiers = {
'store_id': {
'Store1': lambda x: x*1.25
},
'department_id: {
'Veg' : lambda x: x*1.10,
'Fruit': lambda x: x*1.75
}
}
在 Pandas 中是否有一种高效的方法来执行此操作?
作为基准,此代码有效:
from functools import reduce
ans = (table
.assign(gross_revenue = lambda x: x
.apply(lambda row: reduce(lambda x, f: f(x), [row['gross_revenue'],
modifiers.get(row['business_id'], lambda x: x),
modifiers.get(row['department_description'], lambda x: x)
]), axis=1)
)
)
但是,需要接近 2 分钟(表有 5-10m 行)。
有人知道更快的方法吗?
提前致谢。
最佳答案
使用 map
:
store_adjust = {'Store1': 1.25, 'Store10':1.3}
dep_adjust = {'Veg': 1.10, 'Fruit':1.75}
df['gross_revenue'] *= ( df['store_id'].map(store_adjust).fillna(1) *
df['department_id'].map(dep_adjust).fillna(1) )
关于python - 如何有效地映射 pandas DataFrame 上的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65396264/