pandas - 我尝试使用函数将所有 0 值替换为损益
问题描述
def p_l(cols):
cost_price = cols[0]
selling_price = cols[1]
if np.zeros('profit_or_loss'):
if(cost_price<selling_price):
return 'profit'
else:
return 'loss'
else:
return profit_or_loss
df['profit_or_loss']=df[['cost_price','selling_price']].apply(p_l,axis=1)
TypeError: ("'str' 对象不能解释为整数", '发生在索引 0')
解决方案
如果我理解正确,“profit_or_loss”列被初始化为零。
目标是创建一个计算损益(并替换零)的函数。
# create data frame
df = pd.DataFrame({'cost_price': [1, 3, 6, 8, 9],
'sell_price': [2, 4, 5, 7, 9],
'profit_or_loss': [0, 0, 0, 0, 0],
}).assign(change = lambda x: x['sell_price'] - x['cost_price'])
def profit_loss(sell, cost):
return (sell >= cost).map({True: 'profit', False: 'loss'})
# compute P&L
df['profit_or_loss'] = profit_loss(df['sell_price'], df['cost_price'])
df
对于大数据帧,使用起来会比较慢.apply(..., axis=1)
。定义在标量和向量/序列上运行的函数要快得多。(但并不总是可能的。)
推荐阅读
- python - 不使用 sort() 或 sorted() 根据索引值对列表进行排序
- java - 如何结合这两种方法来打印动态游戏板?
- node.js - 如何在mongo中删除选定的文档数组
- python - 从列表创建字典项目列表
- asp.net-core - 带负载的 EF 核心 3.1 HasQueryFilter
- python - Appium 浏览器按钮启动带有参数的应用程序
- amazon-web-services - 连接到 boto3 客户端时 Lambda 函数超时
- flutter - 如何将列表作为字符串从 API 转换为字符串列表
- c - 为什么通用寄存器w0在arm64中会改变值?
- sql - SQL Server:在导入数据时对行进行分区