新手python/编码器谁是试图使数据记录器下载和计算一个更顺利的过程作为一个副项目。不管怎样,我有两个数据帧。第一个是"数据"。其中包含以下内容(为简单起见,缩短了行数):
Logger Name Date and Time Battery Temp(C) Sensor Reading(dg) Sensor Temp(C) Array #
0 TDX 10/1/2021 13:35 2.93 15.59 8772.737 14.5 833
1 TDX 10/1/2021 13:36 2.93 15.59 8773.426 14.5 834
2 TDX 10/1/2021 13:36 2.93 15.59 8773.570 14.5 835
3 TDX 10/1/2021 13:37 2.93 15.59 8773.793 14.5 836
第二个是"param"它有参数,其中包含我用来进行计算的值:
Transducer_ID elevation_tom elevation_toc elevation_ground elevation_tos calculation gage_factor xd_zero_reading thermal_factor xd_temp_at_zero_reading piezo_elev piezo_downhole_depth
0 TDX NaN NaN 1000 NaN linear -0.04135 9138 0.003119 24.8 1600 400
1 Test NaN NaN 1000 NaN linear -0.18320 8997 -0.170100 22.6 800 200
现在我希望代码将能够做的是在"data"被称为"线性收益";它基于使用两个数据框架变量的计算来填充:[digits_zero_digits -传感器读数(dg)] * abs(gage_factor)。如果"参数"只有一个换能器ID和与"数据"相同的行数,但实际上它有许多具有不同ID的行。
我的问题是。实现目标的最好方法是什么?是循环遍历列还是使用pandas库更有效?
提前感谢!
编辑:输出我寻找这是
Logger Name Date and Time Battery Voltage(v) Internal Temp(C) Sensor Reading(dg) Sensor Temp(C) Array # Linear P
0 TDX 10/1/2021 13:35 2.93 15.59 8772.737 14.5 833 15.103625
1 TDX 10/1/2021 13:36 2.93 15.59 8773.426 14.5 834 15.075135
2 TDX 10/1/2021 13:36 2.93 15.59 8773.570 14.5 835 15.069181
3 TDX 10/1/2021 13:37 2.93 15.59 8773.793 14.5 836 15.059959
我想到了一个看起来很有效的方法。我只是删除了" parameter "中的数据。我不需要的:
z = data.iloc[0,0]
param = param[param.Transducer_ID == z]
通过过滤数据,我只从param中提取所需的值:
x = piezo_param.iloc[0, 7]
y = piezo_param.iloc[0, 6]
并执行计算:
data['Linear P'] = (x - data['Sensor Reading(dg)']) * abs(y)
让我知道这是不是完成工作的最好方法!
的更有效的方法是根据我的经验:
- 使用(https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html)连接两个数据帧。
- 对结果数据帧(
df["Linear P"] = df["Sensor Reading(dg)"] * ... ) .
)进行计算
下面是我的过程的一个例子:
import pandas as pd
df1 = pd.DataFrame({'Names': ['a', 'a'],
'var1': [35, 15,],
'var2': [15, 40]})
df2 = pd.DataFrame({'Names1': ['a', 'E'],
'var3': [35, 15,],
'var4': [15, 40]})
final_df = df1.merge(df2, left_on='Names', right_on='Names1', how='left' )
final_df["Linear P"] = final_df["var3"] * final_df["var2"] - abs(final_df["var2"])
print(final_df)