python-3.x - 从具有多个条件的 Pandas 数据帧执行计算
问题描述
请原谅这个问题,因为我是科学专业的,而不是计算机科学专业的,而且我正在自学 Python 以帮助完成一个课堂项目。
我有一个从 .csv 导入的 Pandas 数据框,如下所示:
Item_ID Event_ID Value
27 83531 2533501.8
28 83531 1616262
31 83531 269829
32 83531 55.8
33 83531 269829
34 83531 4882
35 83531 269829
36 83531 4882
37 83531 55.8
38 83531 55.8
27 83532 7137904.8
28 83532 5873877.6
31 83532 497381
32 83532 55.7
33 83532 497381
34 83532 7568
35 83532 497381
36 83532 7568
37 83532 55.7
38 83532 55.7
此数据来自每天多次进行的手动输入,其中 Item_ID 是测量类型,Event_ID 是用户每个“数据输入事件”的唯一标识符,value 是测量值。
我需要对每个唯一的 Event_Id 执行一些计算。
Calc1 = ([28]/[27])*(([31]*[32])/[28])*(([33]-[34])/[33])
Calc2 = [36]/[35]
Calc3 = ([35]-[113])/[35]
Calc4 = [37]
Calc5 = [38]
上述公式中的每个数字代表一个 Item_ID。我希望将公式中的 Item_ID 替换为每个 Event_ID 的同一行中的值。
这个项目是一个月前开始的,将再运行 6 周。届时,将有很多数据点需要手动执行计算。
由于无法跨 Event_ID 执行这些计算,Event_ID 85831 的公式如下所示:
Calc1_Data = ([1616262]/[2533501.8])*(([269829]*[55.8])/[1616262])*(([269829]-[4882])/[269829])
Calc2_Data = [4882]/[269829]
Calc3_Data = ([497381]-[0])/[497381]) ***0 would be placed hear as Item_ID 113 does not exist for this
Event_ID
Calc4_Data = [55.7]
Calc5_Data = [55.7]
然后将结果放入一个新的数据框中,然后我可以对其进行分析。
Event_ID Clac1_Result Calc2_Result Calc3_Result Calc4_Result Calc5_Result
85829
85830
85331 RESULTS HERE
85332 RESULTS HERE
85833
85834
这是我第一次在这里提出问题,因为我已经能够在图书馆文档或以前提出的问题中找到我所有的其他答案。如果我没有提供足够的信息,请告诉我,如果可能,我会澄清。
谢谢
解决方案
您可以使用groupby
后续agg
方法来做到这一点。
首先,将您的计算定义为函数:
# Define calculations
def Calc1(x):
return (x[28]/x[27])*((x[31]*x[32])/x[28])*((x[33]-x[34])/x[33])
def Calc2(x):
return x[36]/x[35]
# Calc3 = lambda x: (x[35]-x[113])/x[35] # commenting out because there's no 113 in the provided example
def Calc4(x):
return x[37]
def Calc5(x):
return x[38]
groupby
然后,使用and执行计算agg
:
df = df.set_index('Item_ID') # set 'Item_ID' to index so that we can use fewer code inside the functions
df = df.groupby('Event_ID').agg([Calc1, Calc2, Calc4, Calc5]) # group by Event_ID, and perform the set of specified calculations
df.columns = df.columns.droplevel(0) # reset column names
输出:
Calc1 Calc2 Calc4 Calc5
Event_ID
83531 5.835418 0.018093 55.8 55.8
83532 3.822212 0.015216 55.7 55.7
推荐阅读
- kubernetes - 获取唯一命名空间的 Pod
- git - Windows 密码已更改,不再能够使用 Git。控制面板中没有凭据管理器
- node.js - 使用nodejs / selenium按时间顺序输出Webelements列表?
- python - 为什么我不需要导入支持模块?
- sql - 为什么我不能在 SQL Server 存储过程中使用 LIMIT 和 OFFSET
- git - 在不换行的情况下添加 git commit 消息
- node.js - 我无法使用 plesk 启动我的 NextJS js 应用程序
- python - While循环和条件
- javascript - 使用 Simplebar 自定义 Select2 下拉菜单的滚动条?
- javascript - 在 React Hooks 中,当 render 时直接调用 setState 时,是否保证 re-render 运行在 children 的 render 之前?