gpt4 book ai didi

python - 使用 lambda 提高迭代数据帧时的代码效率

转载 作者:行者123 更新时间:2023-12-01 04:37:01 27 4
gpt4 key购买 nike

我正在尝试消除用于修改 Pandas 数据帧 中的值的过多 if 语句。我最终将为每个状态分配一个,这是很多代码,并且每次都会针对每个状态执行 if 语句。当我的数据源是列表格式时,我成功地使用了 lambda 来提高代码的效率。第一个代码块对此进行了演示。我正在尝试使用 dataframe 中的数据复制它,但不确定如何复制。

带有列表的高效代码:

Projects = [['Project1', 'CT', 800], ['Project2', 'MA', 1000], ['Project3', 'CA', 20]]

for project in Projects:
project[2] = {
'CT': lambda: [project[2] * 1.4],
'MA': lambda: [project[2] * 1.1],
'CA': lambda: [project[2] * 1.5]
}[project[1]]()

print Projects

使用dataframe的低效代码:

import pandas as pd
df = pd.DataFrame(data = [['Project1', 'CT', 800], ['Project2', 'MA', 1000], ['Project3', 'CA', 20]], columns=['Project ID', 'State', 'Cost'])

for project_index, project in df.iterrows():
if project['State'] == 'CT':
df.ix[project_index, 'Cost'] *= 1.4
if project['State'] == 'MA':
df.ix[project_index, 'Cost'] *= 1.1
if project['State'] == 'CA':
df.ix[project_index, 'Cost'] *= 1.5

print df

最佳答案

我会构建一个包含您的状态和所需乘法因子的字典,然后迭代该字典以获取状态和成本因子元组,使用 loc 和 bool 掩码有选择地仅乘以这些行在你的 df 中:

In [185]:
d = {'CT':1.4, 'MA':1.1, 'CA':1.5}
for item in d.items():
df.loc[df['State'] == item[0], 'Cost'] *= item[1]
df

Out[185]:
Project ID State Cost
0 Project1 CT 1120
1 Project2 MA 1100
2 Project3 CA 30

关于python - 使用 lambda 提高迭代数据帧时的代码效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31542657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com