首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧行(pandas)匹配到单独的数据帧行,并且如果第一列匹配则执行计算

将数据帧行(pandas)匹配到单独的数据帧行,并且如果第一列匹配则执行计算
EN

Stack Overflow用户
提问于 2021-10-06 22:32:21
回答 2查看 39关注 0票数 0

新手python/程序员正在尝试使数据记录器下载和计算过程更流畅,作为一个副项目。不管怎样,我有两个数据帧。第一个是"data“,它包含以下内容(为简单起见,行数缩短):

代码语言:javascript
复制
    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“,它的参数包含我用来进行计算的值:

代码语言:javascript
复制
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

现在我希望代码能够做的是在“数据”中创建一个新的列,称为“线性P”,它基于使用来自两个数据帧的变量的计算进行填充: digits_zero_digits -传感器读数(Dg)* abs(gage_factor)。现在,如果"param“只有一个Transducer ID和与"data”相同的行数,这不是问题,但实际上它有很多具有不同ID的行。

所以我的问题是。实现我的目标的最佳方式是什么?它是循环遍历列,还是使用pandas库更有效?

提前感谢!

编辑:我正在寻找的输出是这样的

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

发布于 2021-10-07 00:27:42

更有效的方法是基于我的经验:

使用对结果数据框( df["Linear P"] = df["Sensor Reading(dg)"] * ... ) . )的(https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.join.html).

  • make计算,
  1. 连接两个数据框

下面是我的流程的一个示例:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-10-07 02:16:01

只是想出了一种看起来相当有效的方法。我只需删除"param“中不需要的数据:

代码语言:javascript
复制
z = data.iloc[0,0]
param = param[param.Transducer_ID == z]

过滤数据后,我只从param中提取所需的值:

代码语言:javascript
复制
x = piezo_param.iloc[0, 7]
y = piezo_param.iloc[0, 6]

并执行计算:

代码语言:javascript
复制
data['Linear P'] = (x - data['Sensor Reading(dg)']) * abs(y)

如果这看起来是完成工作的最好方法,请让我知道!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69473398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档