如何基于Python数据帧中一列的不同值计算公式
发布时间:2022-07-18 13:57:05 203
相关标签: # node.js
我有一个数据框,我想评估一个公式,比如 result = 2*apple - melon - orange按 testid 分组。
我的df如下
df = pd.DataFrame({'testid':(1,2,1,2,1,2),'Name':('apple','apple','melon','melon','orange','orange'), 'A': (1,2,10,20,5,5), 'B': (1,5,4,2,3,1)})
testid | Name | A | B |
1 | apple | 1 | 1 |
2 | apple | 2 | 5 |
1 | melon | 10 | 4 |
2 | melon | 20 | 2 |
1 | orange | 5 | 3 |
2 | orange | 5 | 1 |
我希望我的结果与每个 testid 的列 A 和 B 一样,做apple * 2 - melon - orange. 然后保存到新列 result_A 和 result_B,按 testid 分组
testid | result_A | result_B |
1 | -13 | -5 |
2 | -20 | 7 |
哪个函数可以得到这个结果?
我尝试使用 df.eval() 之类的
eq = 'df[df.Name==\'apple\',[\'A\',\'B\']] *2 - df[df.Name==\'melon\',[\'A\',\'B\']] - df[df.Name==\'orange\',[\'A\',\'B\']]'
df.eval(eq)
但它告诉我
UndefinedVariableError: name 'df' is not defined
我意识到我应该使用 pd.eval(engine='python') 而不是 df.eval() 现在的问题是 df 的不同子集返回不同的索引,导致它们不能加或减
df[df.Name=='apple'][['A','B']]*2
这给了我
A | B | |
0 | 2 | 2 |
1 | 4 | 10 |
然而
df[df.Name=='melon'][['A','B']]
这给了我
2 | 10 | 4 |
3 | 20 | 2 |
所以他们不能一起加或减,因为索引不匹配
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报