python - 通过带有 if 语句的函数对数据帧中的数字执行操作
问题描述
我一直在与 pandas 合作,通过定义的函数对数据集进行分析和执行一些冗长的操作(为了方便,也因为我在不涉及 pandas 的操作中使用了相同的函数)。我正在尝试使用 if 和 else 语句根据哪个数字更大来执行一些操作。
我无法在其他答案中找到解决方法。这是我尝试执行哪种逻辑操作的简短简化示例:
import pandas as pd
df = pd.DataFrame({"A": [177,166,155,125,146,149,192,160,111,85],
"B": [26.2,27,26.8,23.4,23.3,17.5,26.4,25.7,18.9,15.8],
"C": [9.2,99.1,29.3,8.6,8,7.2,10,39.4,47.25,4.5,]})
x = 'A'
y = 'B'
z = 'C'
def test(a,b,c):
h = a*b/c
return h
df['D'] = test(df[x],df[y],df[z])
到目前为止,功能一直在为我工作:
print(df['D'])
0 504.065217
1 45.227043
2 141.774744
3 340.116279
4 425.225000
5 362.152778
6 506.880000
7 104.365482
8 44.400000
9 298.444444
Name: D, dtype: float64
我希望使此类操作正常工作:
def test2(a,b,c):
if a > b:
return a*c
else:
return b*c
df['E'] = test2(df[x],df[y],df[z])
print(df['E'])
我收到了明显的错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
解决方案
你需要:
df['E'] = df.apply(lambda x: test2(x['A'], x['B'], x['C']) ,1)
输出:
A B C E
0 177 26.2 9.20 1628.40
1 166 27.0 99.10 16450.60
2 155 26.8 29.30 4541.50
3 125 23.4 8.60 1075.00
4 146 23.3 8.00 1168.00
5 149 17.5 7.20 1072.80
6 192 26.4 10.00 1920.00
7 160 25.7 39.40 6304.00
8 111 18.9 47.25 5244.75
9 85 15.8 4.50 382.50
推荐阅读
- jenkins-groovy - 使用 Groovy 标记构建器构建简单的网页。在步骤中找不到这样的 DSL 方法“主体”
- swift - 在 QLPreviewController 中禁用 AR 对象遮挡
- visual-studio-code - Visual Studio Code 更改特定单词的颜色
- sql - 有没有办法根据存储为表中的行的条件来填充列
- node.js - DiscordAPIError:缺少权限 - 机器人崩溃而不是给出错误消息
- azure - 调用外部 API:将集成测试移动到 docker 容器后随机变慢
- r - r中的长格式data.table中的id填充变量单元格
- javascript - Panresponder 自定义起始位置
- vue.js - VUE 3 dragenter 和 dragleave 在子元素上被错误地调用
- python - Discord.py 我应该使用 aiomysql 或 mysql-connector 哪个模块?